描述
合法的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;
}
参考:https://blog.csdn.net/qq_66345100/article/details/122745997
供参考:
#include <stdio.h>
int isVaildIp(const char* ip)
{
int dots = 0;//字符 . 的个数
int setions = 0;//ip每一部分总和(0-255)
int strnum = 0; //字符串长度记录
if (NULL == ip || *ip == '.')
return 0;//格式错误
while (*ip)/
{
if (*ip == '.')
{
dots++; //字符 . 的个加一
if (setions >= 0 && setions <= 255)//检查ip是否合法
setions = 0;
else
return 0;
}
else if (*ip >= '0' && *ip <= '9')//判断是不是数字
setions = setions * 10 + (*ip - '0');//求每一段总和
else
return 0; //该字符既不是数字也不是点
ip++;
if (++strnum > 15)//IP地址字符串非结束符字符数最多15个
return 0;
}
//判断IP最后一段是否合法
if (setions >= 0 && setions <= 255)
{
if (dots == 3)
return 1;
}
return 0;
}
int main()
{
int n;
char str[32];
scanf("%d", &n);
getchar();
while(n--){
gets(str);
if(isVaildIp(str))
printf("yes\n");
else
printf("no\n");
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!