题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
bool splitip_4(char* ip) {
int i = 0, count = 0, cnt = 0;
while (ip[i] != '\0') {
count++;
if (ip[i] == '.') {
cnt++;
}
//是否有0开头的
if (count == 2 ) {
if (ip[i - 1] == '0')
return false;
}
if (count == 3) {
if ((ip[i - 2] - '0') * 100 + (ip[i - 1] - '0') * 10 + (ip[i] - '0') > 255)
return false;
}
//. 分割的位数
if (ip[i] == '.') {
if (count > 4)
return false;
count = 0;
}
//字符处在0-9
if ((ip[i] < '0' || ip[i] > '9') && ip[i] != '.')
return false;
//
i++;
}
//最后一段没有字符
if (count == 0 && cnt == 3)
return false;
return true;
}
bool splitip_6(char* ip) {
int i = 0, count = 0, cnt = 0;
if(strstr(ip,"::"))
return false;
while (ip[i] != '\0') {
count++;
if (ip[i] == ':') {
cnt++;
}
if(cnt>7)
return false;
//. 分割的位数
if (ip[i] == ':') {
if (count > 5)
return false;
count = 0;
}
//字符zai限制内
if(ip[i] != ':'){
if (((ip[i] >='0' && ip[i] <= '9')||ip[i] >='a' && ip[i] <= 'f'||ip[i] >='A' && ip[i] <= 'F') )
;
else
return false;
}
//
i++;
}
//最后一段没有字符
if (count == 0 && cnt == 7)
return false;
return true;
}
char* solve(char* IP ) {
// write code here
char* s = "IPv4", *p = "IPv6", *q = "Neither";
if (strchr(IP, '.')) {
if (splitip_4(IP))
return s;
return q;
} else {
if (splitip_6(IP))
return p;
return q;
}
return q;
}
