首先将字符串IP中的每一段子串保存在数组vec中,然后判断格式正确与否,分为段数的判断、0的判断、值的判断。
class Solution {
public:
/**
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
bool is_ipv4(string ip){
for(auto& c: ip) if(c=='.') c=' ';
vector<string> vec{};
string str{};
stringstream s_stream{ip};
while(s_stream>>str) vec.push_back(str);
if(vec.size()!=4) return false;
for(auto x: vec){
if(x[0]=='0' && x.size()>1) return false;
if(stoi(x)>255) return false;
for(auto c: x) if(!isdigit(c)) return false;
}
return true;
}
bool is_ipv6(string ip){
for(auto& c: ip) if(c==':') c=' ';
vector<string> vec{};
string str{};
stringstream s_stream{ip};
while(s_stream>>str) vec.push_back(str);
if(vec.size()!=8) return false;
for(auto x: vec){
char* endptr=nullptr;
if(strtol(x.data(),&endptr,16)==0 && x.size()>1) return false;
if(strtol(x.data(),&endptr,16)>0xffff) return false;
}
return true;
}
string solve(string IP) {
if(is_ipv4(IP)) return "IPv4";
else if(is_ipv6(IP)) return "IPv6";
else return "Neither";
}
};