题解 | #验证IP地址#
验证IP地址
http://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
思路很简单,就是把字符串遍历,然后想一些特殊case就可
C语言版本
/** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ int IPv4(char* IP) { int tmp_ipv4 = 0; int count = 0; while(*IP) { while(*IP != '.' && *IP != '\000' && *IP != ':') { char* IP_tmp = IP; IP_tmp++; if(*IP == '0' && *IP_tmp != '0') { if(*IP_tmp == '.') { IP++; continue; } return 0; } tmp_ipv4 = tmp_ipv4*10+((int)(*IP)-48); IP++; } IP++; if(tmp_ipv4>=0 && tmp_ipv4<=255) { count++; tmp_ipv4 = 0; } else return 0; } if(count==4) return 1; return 0; } int IPv6(char* IP) { int count_ipv6 = 0; int count_6 = 0; while(*IP) { while(*IP != ':' && *IP != '\000' && *IP != '.') { if(*IP >='a' && *IP <= 'e' || *IP >='A' && *IP <= 'E' || *IP >='0' && *IP <= '9') { count_ipv6++; IP++; } else { return 0; } } count_6++; if(count_ipv6 == 4) { IP++; count_ipv6=0; } else if(count_ipv6 < 4 && count_ipv6>0 && *IP == ':') { IP++; count_ipv6=0; } else return 0; } if(count_6==8) return 1; return 0; } char* solve(char* IP ) { // write code here int res_4 = IPv4(IP); if(res_4==1) return "IPv4"; int res_6 = IPv6(IP); if(res_6==1) return "IPv6"; return "Neither"; }
C++版本
class Solution { public: /** * 验证IP地址 * @param IP string字符串 一个IP地址字符串 * @return string字符串 */ int IPv4(string IP_N) { int tmp_ipv4 = 0; int count = 0; char* IP = &IP_N[0]; int lenth = 4; while(lenth) { while(*IP != '.' && *IP != ':' && *IP != '\000') { char* IP_tmp = IP; IP_tmp++; if(*IP == '0' && *IP_tmp != '0') { if(*IP_tmp == '.') { IP++; continue; } return 0; } tmp_ipv4 = tmp_ipv4*10+((int)(*IP)-48); IP++; } IP++; lenth--; if(tmp_ipv4>=0 && tmp_ipv4<=255) { count++; tmp_ipv4 = 0; } else return 0; } if(count==4) return 1; return 0; } int IPv6(string IP_N) { int count_ipv6 = 0; int count_6 = 0; char* IP = &IP_N[0]; int lenth = 8; while(lenth) { while(*IP != ':' && *IP != '\000' && *IP != '.') { if(*IP >='a' && *IP <= 'e' || *IP >='A' && *IP <= 'E' || *IP >='0' && *IP <= '9') { count_ipv6++; IP++; } else { return 0; } } count_6++; lenth--; if(count_ipv6 == 4) { IP++; count_ipv6=0; } else if(count_ipv6 < 4 && count_ipv6>0 && *IP == ':') { IP++; count_ipv6=0; } else return 0; } if(count_6==8) return 1; return 0; } string solve(string IP) { // write code here int res_4 = IPv4(IP); if(res_4==1) return "IPv4"; int res_6 = IPv6(IP); if(res_6==1) return "IPv6"; return "Neither"; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法