/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 验证IP地址
* @param IP string字符串 一个IP地址字符串
* @return string字符串
*/
#include <ctype.h>
#define isValid(ip) (ip >= 0 && ip <= 255)
char* solve(char* IP ) {
// write code here
int i = 0;
int ipv4 = 0;
int ipv6 = 0;
char temp[5];
int idx = 0;
while(IP[i] != '.' && IP[i] != ':' && IP[i] != '\0') {
temp[idx] = IP[i];
if(isalpha(IP[i])) ipv4 = -1;
idx++;
i++;
}
temp[idx] = '\0';
printf("temp is %s\n", temp);
if(IP[i] == '.') {
if(temp[0] == '0' && temp[1]) return "Neither";
int ip = atoi(temp);
if(isValid(ip)) {
ipv4++;
i++;
for(int j = ipv4; j < 4; j++) {
idx = 0;
while(IP[i] != '.' && IP[i] != '\0') {
if(!isdigit(IP[i])) return "Neither";
temp[idx] = IP[i];
idx++;
i++;
}
temp[idx] = '\0';
printf("temp is %s\n", temp);
if(temp[0] == '0' && temp[1]) return "Neither";
if(idx == 0) return "Neither";
ip = atoi(temp);
printf("atoi : %d\n", ip);
if(isValid(ip)) {
ipv4++;
i++;
} else {
return "Neither";
}
}
}
} else if(IP[i] == ':') {
i = 0;
for(int j = 0; j < 8; j++) {
idx = 0;
while(IP[i] != ':' && IP[i] != '\0') {
if(idx <= 3 && isdigit(IP[i]) || (IP[i] >= 'A' && IP[i] <= 'F' || (IP[i] >= 'a' && IP[i] <= 'f'))) {
temp[idx] = IP[i];
idx++;
i++;
} else {
return "Neither";
}
}
temp[idx] = '\0';
if(idx == 0) return "Neither";
printf("%s\n", temp);
i++;
ipv6++;
}
} else {
return "Neither";
}
if(ipv4 == 4 && IP[i - 1] == '\0') return "IPv4";
else if(ipv6 == 8 && IP[i - 1] == '\0') return "IPv6";
return "Neither";
}