题目描述
在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧^_^
输入
输入由多行组成,每行是一个字符串。
字符串长度最大为30,且不含空格和不可见字符
输出
对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N
样例输入
1.2.3.4
a.b.c.d
267.43.64.12
12.34.56.bb
210.43.64.129
-123.4.5.6
样例输出
Y N N N YN
【代码】
#include <stdio.h> #include <ctype.h> #include <string.h> typedef struct ip { int a; int b; int c; int d; char ok; } IP; int Validate(char *p) { int length = strlen(p); if(length > 30) return 0; for(int i = 0; p[i] != 0; i++) if(p[i] != '.' && (isspace(p[i]) || ispunct(p[i]))) return 0; return 1; } int ValidateIp(IP ip) { return ip.a >= 0 && ip.a <= 255 && ip.b >= 0 && ip.b <= 255 && ip.c >= 0 && ip.c <= 255 && ip.d >= 0 && ip.d <= 255; } void Rest(IP *ip) { ip->a = -1; ip->b = -1; ip->c = -1; ip->d = -1; ip->ok = 'N'; } int main(void) { char str[30] = { 0 }; IP ip; //input while(gets(str)) { Rest(&ip); //ip里面的值全部置为否 if(Validate(str)) //判断IP地址的有效性 { sscanf(str, "%d.%d.%d.%d",&ip.a, &ip.b, &ip.c, &ip.d); if(ValidateIp(ip)) //再判断IP地址里面数值的有效范围 ip.ok = 'Y'; } printf("%c\n",ip.ok); } getchar(); getchar(); return 0; }