单纯的手撕字符串,担心嵌入式可能会考。记录一下。
IPv6给的例子02001,多余0不对,我的理解就是超过4个就是不对了。
string solve(string IP) {
// write code here
char * rtn1 = "IPv4";
char * rtn2 = "IPv6";
char * rtn3 = "Neither";
string rtn = rtn3;
int length = IP.size();
//Part1,判断IPv4 还是v6
bool flag = 0; //0 : v4 1: v6
for(int i=0;i<length;i++)
{
if( IP[i] == '.')
{
flag = 0;
break ;
}
else if(IP[i] == ':')
{
flag = 1;
break ;
}
else
continue;
}
//part2,
if(flag == 0) //判断IPv4
{
int i=0;
int j=0;
int num = 0;
while(IP[i] != '\0')
{
while(IP[i] != '\0' && IP[i] != '.')
i++;
//判断有是不是0 //判断 ..这种情况
if(IP[j] == '0' || j == i)
return rtn;
//判断0-255
int temp = 0;int k = j;
while(k<i)
{
temp = temp * 10 + (IP[k]-'0');
k++;
}
if(temp<0 || temp >255)
return rtn;
if(IP[i] != '\0')
{
i++;
j=i;
}
num++;
}
if(num == 4) //判断是不是 x.x.x.x格式
{
string rtn = rtn1;
return rtn;
}
else
{
return rtn;
}
}else{ //判断IPv6
int i=0;
int j=0;
int num = 0;
while(IP[i] != '\0')
{
while(IP[i] != '\0' && IP[i] != ':')
i++;
//判断有是不是多余4个 //判断::这种情况
if(i-j > 4 || i == j)
return rtn;
if(IP[i] != '\0') //到了末尾就不会继续向下移动了
{
i++;
j=i;
}
num++;
}
if(num == 8) //判断是不是 x:x:x:x:x:x:x:x 格式
{
string rtn = rtn2;
return rtn;
}
else
{
return rtn;
}
}
}
京公网安备 11010502036488号