题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ string solve(string IP) { // write code here if (is_ipv4(IP)) { return "IPv4"; } if (is_ipv6(IP)) { return "IPv6"; } return "Neither"; } private: bool is_ipv4(const std::string& ip) { auto res = split(ip, '.'); if (res.size() != 4) { return false; } for (int i = 0; i < res.size(); i++) { if (res[i].empty()) { return false; } if (res[i][0] == '0') { return false; } for (int k = 0; k < res[i].size(); k++) { if (!isdigit(res[i][k])) { return false; } } if (stoi(res[i]) > 255 || stoi(res[i]) < 0) { return false; } } return true; } private: bool is_ipv6(const std::string& ip) { auto res = split(ip, ':'); if (res.size() != 8) { return false; } for (int i = 0; i < res.size(); i++) { if (res[i].empty()) { return false; } if (res[i].size() > 4) { return false; } for (int k = 0; k < res[i].size(); k++) { if (isdigit(res[i][k]) || res[i][k] >= 'a' && res[i][k] <= 'f' || (res[i][k] >= 'A' && res[i][k] <= 'F')) { continue; } else { return false; } } } return true; } private: std::vector<std::string> split(const string& str, char delim) { std::vector<std::string> res; std::string tmp; for (int i = 0; i < str.size(); i++) { if (str[i] != delim) { tmp.push_back(str[i]); } else { res.push_back(tmp); tmp.clear(); } } res.push_back(tmp); return res; } };