题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
#include <ctype.h>
#include <string.h>
int str_to_10(char* s,char* e)
{
if(s == e ||('0'==s[0] && '0' != s[1]))
return 256;
int num = 0;
while(s<e)
{
if(!isdigit(*s))
return 256;
num = num*10 + (*s++ -'0');
}
return num;
}
int str_to_16(char* s,char* e)
{
if(s == e || ('0'==s[0] && '0' == s[1]))
return 65536;
int num = 0;
while(s<e)
{
if(!isxdigit(*s))
return 65536;
if(isalpha(*s))
num = num*16 + (*s++ -'0');
else if(islower(*s))
num = num*16 + (*s++ -'a');
else
num = num*16 + (*s++ -'A');;
}
return num;
}
int is_ipv4(char* IP)
{
char *s = IP, *e = NULL, n = 0;
while(NULL != (e=strchr(s,'.')))
{
if(255 < str_to_10(s,e))
return 0;
s = e + 1;
n++;
}
return !(3 != n || 255 < str_to_10(s,s+strlen(s)));
}
int is_ipv6(char* IP)
{
char *s = IP, *e = NULL, n = 0;
while(NULL != (e=strchr(s,':')))
{
if(65535 < str_to_16(s,e))
return 0;
s = e + 1;
n++;
}
return !(7 != n || 65535 < str_to_16(s,s+strlen(s)));
}
char* solve(char* IP )
{
// write code here
if(is_ipv4(IP))
return "IPv4";
else if(is_ipv6(IP))
return "IPv6";
return "Neither";
}

文远知行公司福利 555人发布