描述
合法的IP地址是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。请编写程序判断IP地址的合法性。
输入
第1行是一个整数n,表示随后有n组数据。每组数据占一行,为一个待判断合法性的IP地址。
输出
对每组数据,如果是合法的IP地址,输出yes,否则输出no
样例
输入
2
202.115.32.24
a.b.c.d
输出
yes
no
描述
合法的IP地址是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不会有前导零存在,如001这种情况。请编写程序判断IP地址的合法性。
输入
第1行是一个整数n,表示随后有n组数据。每组数据占一行,为一个待判断合法性的IP地址。
输出
对每组数据,如果是合法的IP地址,输出yes,否则输出no
样例
输入
2
202.115.32.24
a.b.c.d
输出
yes
no
运行结果:
代码:
#include <stdio.h>
#include <stdlib.h>
//将s中的字符串用.拆分
int splitstr(const char* s, char ip[][10], int* n)
{
int i = 0, j = 0, k = 0;
while (1)
{
if (s[i] == '\0')
{
ip[k][j] = '\0';
k++;
break;
}
if (s[i] >= '0' && s[i] <= '9')
ip[k][j++] = s[i];
else if (s[i] == '.')
{
ip[k][j] = '\0';
j = 0;
k++;
}
else
return 0; //其他字符
i++;
}
*n = k;
}
//字符串转数字
int str2int(const char* p)
{
int i=0, v = 0;
while (p[i] != '\0')
{
v = v * 10 + (p[i] - '0');
i++;
}
return v;
}
//判断是否合法
int isValid(char ip[][10], int n)
{
int i, v;
if (n != 4)
return 0;
else
{
for (i = 0; i < n; i++)
{
v = str2int(ip[i]);
if (v < 0 || v > 255)
return 0;
}
return 1;
}
}
int main()
{
int n, i, nmb;
char str[100],ip[10][10];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", str);
if (splitstr(str, ip, &nmb) && isValid(ip,nmb))
{
printf("yes\n");
}
else
printf("no\n");
}
return 0;
}