leetcode-华为专题-468. 验证IP地址
class Solution { public: vector<string> split(string str, string flag){ vector<string> res; int fd = 0; // 注意前面是赋值。fd = str.find(flag) // 后面是判断,如果fd == str.npos说明没找到 while((fd=str.find(flag))&&fd!=str.npos){ res.push_back(str.substr(0,fd)); // 从0开始截取fd个字符串 str = str.substr(fd+1); // 更新str } res.push_back(str); // 加上最后还剩下的尾部 return res; } string validIPAddress(string IP) { if(checkIPv4(IP)){ return "IPv4"; }else if(checkIPv6(IP)) return "IPv6"; else return "Neither"; } bool checkIPv4(string IP){ vector<string> IPv4str = split(IP,"."); // 按照点分割 int len = IPv4str.size(); if(len!=4) return false; for(auto s:IPv4str){ if(s.empty()||s.size()==0||s.size()>3) // 为空,或者位数超过3 return false; // 判断每一位是不是数字 for(auto str:s){ cout<<"str1:"<<endl; if(!isdigit(str)) return false; } // 只有在上面判断完成是不会数字基础上,才能调用stoi if(to_string(stoi(s)).size()<s.size()) // 判断是否含有无效0 return false; if(stoi(s)<0||stoi(s)>255) // 判断是不是超过int范围 return false; } return true; } bool checkIPv6(string IP){ vector<string> IPv6str = split(IP,":"); // 按照点分割 int len = IPv6str.size(); if(len!=8) return false; for(auto s:IPv6str){ if(s.empty()||s.size()==0||s.size()>4) // 为空,或者位数超过4 return false; for(char str:s){ // 对每一位范围判断 if(!(isdigit(str)||str>='a'&&str<='f')) if(!(isdigit(str)||(str>='a'&&str<='f')||(str>='A'&&str<='F'))) return false; } } return true; } };