题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
#include <cctype> #include <string> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ vector<string> split(string s, char spliter) { vector<string> ans; int l = 0, r = 0; while (r != s.size()) { if (s[r] == spliter) { ans.push_back(s.substr(l, r - l)); ++r; l = r; } else { ++r; } } ans.push_back(s.substr(l, r - l)); return ans; } bool isIPv4(string IP) { vector<string> s = split(IP, '.'); if (s.size() != 4) { return false; } for (int i = 0; i < s.size(); ++i) { // 判断位数 if (s[i].size() == 0 || s[i].size() > 3) { return false; } // 判断前导零 if (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; } } // 判断数值 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 (isalpha(s[i][j]) && (tolower(s[i][j]) < 'a' || tolower(s[i][j]) > 'f') ) { return false; } } } return true; } string solve(string IP) { if (isIPv4(IP)){ return "IPv4"; } else if (isIPv6(IP)) { return "IPv6"; } return "Neither"; } };