题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
#include <string> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return stiring字符串 */ vector<string> split(string s, string spliter) { vector<string> res; int i; while ((i = s.find(spliter)) && i != s.npos) { res.push_back(s.substr(0, i)); s = s.substr(i + 1); } res.push_back(s); return res; } bool isIPv4 (string IP) { vector<string> s = split(IP, "."); //IPv4必定为4组 if(s.size() != 4) return false; for(int i = 0; i < s.size(); i++){ //不可缺省,有一个分割为零,说明两个点相连 if (s[i].size() == 0) return false; //比较数字位数及不为零时不能有前缀零 if (s[i].size() < 0 || s[i].size() > 3 || (s[i][0]=='0' && s[i].size() != 1)) return false; //遍历每个分割字符串,必须为数字 for (int j = 0; j < s[i].size(); j++) if (!isdigit(s[i][j])) return false; //转化为数字比较,0-255之间 int num = stoi(s[i]); if (num < 0 || num > 255) return false; } return true; } bool isIPv6(string IP) { vector<string> s = split(IP, ":"); if (s.size() != 8) return false; for (int i = 0; i < s.size(); i++) { if (s[i].size() == 0 || s[i].size() > 4) return false; for(int j = 0; j < s[i].size(); j++){ if (!(isdigit(s[i][j]) || (s[i][j] >= 'a' && s[i][j] <= 'f') || (s[i][j] >= 'A' && s[i][j] <= 'F'))) return false; } } return true; } string solve(string IP) { if (IP.size() == 0) return "Neither"; if (isIPv4(IP)) return "IPv4"; else if (isIPv6(IP)) return "IPv6"; return "Neither"; } };