题解 | #合法IP#
合法IP
https://www.nowcoder.com/practice/995b8a548827494699dc38c3e2a54ee9
//1.没有其他字符 2.有且仅有仨点,且不相连,且不出现在两头 3.两位及以上数字不以0开头 #include <math.h> #include <stdio.h> #include <string.h> int main() { char ip[20] = {0}; scanf("%s", ip); int flag = 0; int l = 0,x = -1; int len = strlen(ip); for (int i = 0; i < len; i++) { if (ip[i] == '.' || (ip[i] >= '0' && ip[i] <= '9') ) { if (ip[i] == '.') { l++; } if (ip[0] == '0' && ip[1] != '.') { x = 0; flag = 1; break; } if (ip[i] == '.' && ip[i + 1] == '0' && ip[i + 2] >= '0' && ip[i + 2] <= '9') { x = 0; flag = 1; break; } } else { x = 0; flag = 1; break; } } if (flag == 0 && l == 3) { int a, b, c, d; a = b = c = d = -1; sscanf(ip, "%d.%d.%d.%d", &a, &b, &c, &d); //printf("%d\n", a); //printf("%d\n", b); //printf("%d\n", c); //printf("%d\n", d); if (a != EOF && b != EOF && c != EOF && d != EOF) { int m = pow(2, 8); if (a < m && b < m && c < m && d < m) { x = 1; } else { x = 0; } } else { x = 0; } }else { x = 0; } //printf("%d",x); if (x == 0) { printf("NO"); }else { printf("YES"); } return 0; }