题解 | #验证IP地址#
验证IP地址
https://www.nowcoder.com/practice/55fb3c68d08d46119f76ae2df7566880
#include <stdbool.h> #include <string.h> int counter(char* str, char s){ int count=0; for (int i=0; i<strlen(str); i++) { if (str[i]==s) { count++; } } return count; } bool isDigit(const char ch){ if (ch>='0'&&ch<='9') return true; return false; } bool isDigit16(const char ch){ if (ch>='0'&&ch<='9') return true; if (ch>='A'&&ch<='F') return true; if (ch>='a'&&ch<='f') return true; return false; } bool isValidIPv4(char* IP){ int len=strlen(IP); if(counter(IP,'.')!=3)return false;//保证只有4个区间 if (IP[len]=='.') return false; int left=0,right=0; while (right<len) { right=left; while (right<len&&IP[right]!='.') { if (!isDigit(IP[right])) return false;//保证区间内都是数字 right++; } if (left==right||right>left+3) return false;//保证区间长度 int cur=0; for (int i=left; i<right; i++) cur=cur*10+IP[i]-'0'; if (cur>255||(cur>=0&&IP[left]=='0')) return false;//保证区间内的数符合规定 left=right+1;//开始找下一区间 } return true; } bool isValidIPv6(char* IP){ int len=strlen(IP); if(counter(IP,':')!=7)return false; if (IP[len]==':') return false; int left=0,right=0; while (right<len) { right=left; while (right<len&&IP[right]!=':') { if (!isDigit16(IP[right])) return false; right++; } if (left==right||right>left+4) return false; left=right+1; } return true; } char* solve(char* IP ) { // write code here if (isValidIPv4(IP)) return "IPv4"; else if (isValidIPv6(IP)) return "IPv6"; return "Neither"; }