题解 | #验证IP地址#
验证IP地址
http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
单纯的手撕字符串,担心嵌入式可能会考。记录一下。
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; } } }