题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
//按照要求逐一判断合法性,当然如果输入流和字符串函数用的熟练可以适当简化,例如sscanf等 #include <stdio.h> #include<string.h> int main() { int i = 0, j = 0, num[3], n = 0; char arr[16]; scanf("%s", arr); int sz = strlen(arr); if (sz > 15 || sz < 7) { printf("NO\n"); return 0; } for (i = 0; i < sz; i++) { if ((arr[i] <= '9' && arr[i] >= '0') || (arr[i] == '.')) { continue; } printf("NO\n"); return 0; } for (i = 0; i < sz; i++) { if (arr[i] == '.') { num[j] = i; j++; } } if (!((j == 3) && (num[0] <= 3) && (num[0] >= 1) && (num[1] >= 3) && (num[1] <= 7) && (num[2] >= 5) && (num[2] <= 11))) { printf("NO\n"); return 0; } for (i = 0; num[0] - i > 0; i++) { n = n * 10 + arr[i] - 48; } if (n > 255) { printf("NO\n"); return 0; } if (num[0] > 1 && arr[0] == '0') { printf("NO\n"); return 0; } n = 0; for (i = num[0] + 1; num[1] - i > 0; i++) { n = n * 10 + arr[i] - 48; } if (n > 255) { printf("NO\n"); return 0; } if ((i > num[0] + 2) && (arr[num[0] + 1] == '0')) { printf("NO\n"); return 0; } n = 0; for (i = num[1] + 1; num[2] - i > 0; i++) { n = n * 10 + arr[i] - 48; } if (n > 255) { printf("NO\n"); return 0; } if ((i > num[1] + 2) && (arr[num[1] + 1] == '0')) { printf("NO\n"); return 0; } n = 0; for (i = num[2] + 1; i < sz; i++) { n = n * 10 + arr[i] - 48; } if (n > 255) { printf("NO\n"); return 0; } if ((i > num[2] + 2) && (arr[num[2] + 1] == '0')) { printf("NO\n"); return 0; } printf("YES\n"); return 0; }