题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
class Solution { public: /** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ string nth = "Neither"; string v4 = "IPv4"; string v6 = "IPv6"; bool isLegal(string str, int mode) { bool leg = false; switch (mode) { case 4: if (str.size() > 1 && str[0] == '0') leg = false; else if (stoi(str) > 255 || stoi(str) < 0) leg = false; else { for (auto i : str) if (!(i >= '0' && i <= '9')) return false; leg = true; } break; case 6: if (str.size() > 4) leg = false; else { for (auto i : str) if (!((i >= '0' && i <= '9') || (i >= 'a' && i <= 'f') || (i >= 'A' && i <= 'F'))) return false; leg = true; } break; default: break; } return leg; } string cal4Or6(string s, vector<int>& ilist, int n, int calV4Or6) { if (ilist.size() != n) return nth; int index = 0; vector<string> strVc; for (int i = 0; i < ilist.size(); i++) { if (i < ilist.size() - 1) if ((ilist[i + 1] - ilist[i]) == 1) return nth; strVc.push_back(s.substr(index, ilist[i] - index)); index = ilist[i] + 1; } strVc.push_back(s.substr(index, ilist.size() - index)); for (auto i : strVc) { if (!isLegal(i, calV4Or6)) return nth; } return calV4Or6 == 4 ? v4 : v6; } string solve(string IP) { string s = nth; if (IP.length() < 7) return s; int i = 0; bool isv4 = false; bool isv6 = false; vector<int> ilist; while (i < IP.length()) { if (IP[i] == ':' || IP[i] == '.') { if (IP[i] == '.') isv4 = true; else isv6 = true; ilist.push_back(i); } i++; } if (isv4) s = cal4Or6(IP, ilist, 3, 4); // 3个. else if (isv6) s = cal4Or6(IP, ilist, 7, 6); // 7个: return s; } };