题解 | #验证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; }