题意:
编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。
规则如下:
方法:
模拟
思路:模拟。
首先,遍历字符串,初始判断是IPV4还是IPV6。如果是IPV4,错误的情况:某一段IP值超过 255 或含有前导 0 ;如果是IPV6,错误的情况:某一段IP的长度大于4或等于0 或 字符超过范围。
class Solution {
public:
string solve(string IP) {
int len=IP.size();
int flag=0;//1表示IPV4,2表示IPV6,3表示失败
for(int i=0;i<len;i++){//判断是IPV4还是IPV6
if(IP[i]=='.'){
flag=1;
break;
}else if(IP[i]==':'){
flag=2;
break;
}
}
string s="";
int x=0;
if(flag==1){//判断IPV4
for(int i=0;i<len;i++){
if(IP[i]=='.'){
if(x>255||s.size()>1&&s[0]=='0'){//如果超过255或含有前导0,则返回失败
flag=3;
break;
}
x=0;
s="";
}else{
s+=IP[i];
x=x*10+IP[i]-'0';
}
}
if(x>255||s.size()>1&&s[0]=='0'){//如果超过255或含有前导0,则返回失败
flag=3;
}
x=0;
s="";
}else if(flag==2){//判断IPV6
for(int i=0;i<len;i++){
if(IP[i]==':'){
if(s.size()>4||s.size()==0){//如果某一段的长度大于4或等于0,则返回失败
flag=3;
break;
}
s="";
}else{
s+=IP[i];
if(IP[i]>='g'&&IP[i]<='z'||IP[i]>='G'&&IP[i]<='Z'){//如果字符是超过范围,则返回失败
flag=3;
break;
}
}
}
if(s.size()>4||s.size()==0){//如果某一段的长度大于4或等于0,则返回失败
flag=3;
}
s="";
}
if(flag==1){
return "IPv4";
}else if(flag==2){
return "IPv6";
}
return "Neither";
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号