题目:
题解:
char * validIPAddress(char * queryIP) {
int len = strlen(queryIP);
if (strchr(queryIP, '.')) {
// IPv4
int last = -1;
for (int i = 0; i < 4; ++i) {
int cur = -1;
if (i == 3) {
cur = len;
} else {
char * p = strchr(queryIP + last + 1, '.');
if (p) {
cur = p - queryIP;
}
}
if (cur < 0) {
return "Neither";
}
if (cur - last - 1 < 1 || cur - last - 1 > 3) {
return "Neither";
}
int addr = 0;
for (int j = last + 1; j < cur; ++j) {
if (!isdigit(queryIP[j])) {
return "Neither";
}
addr = addr * 10 + (queryIP[j] - '0');
}
if (addr > 255) {
return "Neither";
}
if (addr > 0 && queryIP[last + 1] == '0') {
return "Neither";
}
if (addr == 0 && cur - last - 1 > 1) {
return "Neither";
}
last = cur;
}
return "IPv4";
}
else {
// IPv6
int last = -1;
for (int i = 0; i < 8; ++i) {
int cur = -1;
if (i == 7) {
cur = len;
} else {
char * p = strchr(queryIP + last + 1, ':');
if (p) {
cur = p - queryIP;
}
}
if (cur < 0) {
return "Neither";
}
if (cur - last - 1 < 1 || cur - last - 1 > 4) {
return "Neither";
}
for (int j = last + 1; j < cur; ++j) {
if (!isdigit(queryIP[j]) && !('a' <= tolower(queryIP[j]) && tolower(queryIP[j]) <= 'f')) {
return "Neither";
}
}
last = cur;
}
return "IPv6";
}
}