处理字符串:
IPv6的错误形式可能有如下:
- 多了首位0
- 出现 ::
- 字符不在0-9 a-f A-F之间
IPv4错误形式可能有如下:
多了首位'0'
超过0-255范围
出现的 ..
class Solution { public: /** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ bool type(string &s) { for (auto & c : s) { if (c == ':') return false; if (c == '.') return true; } return false; } bool checkIPv6(string &s) { int ch_cnt = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == ':') { if (ch_cnt > 4 || ch_cnt == 0) return false; //多余的字符 或 空 ch_cnt = 0; } else if (!( s[i] <= '9' && s[i] >= '0' || s[i] <= 'f' && s[i] >= 'a' || s[i] <= 'F' && s[i] >= 'A')) { return false; } else ch_cnt++; } return true; }; bool checkIPv4(string &s) { int k = 0; s.push_back('.'); for (int i = 0; i < s.size(); i++) { if (s[i] == '.') { s[i] = '\0'; int num = atoi(&s[k]); if (s[k] == '\0' || (s[k] == '0' && num != 0) || !(num < 256 && num > -1) ) { return false; } k = i + 1; } } return true; } string solve(string IP) { // write code here if (type(IP)) { if (checkIPv4(IP)) return "IPv4"; } else { if (checkIPv6(IP)) return "IPv6"; } return "Neither"; } };