解题思路:
注意事项:
参考代码:
#include<stdio.h>
int Ip(char *ip)
{
int i, num = 0;
int flag = 0;
for(i = 0; ip[i] != '\0'; i++)
{
/*
判断遇到的字符是否为 0,
如果是 0 则判断是不是第一个遇到的,
如果 num == 0 则 一定是第一个遇到的。
如果第一个字符是 0 则 flag = 1。
*/
if(ip[i] == '0' && num == 0) flag = 1;
/*
如果第一个字符是 0 则 判断下一个字符,
如果下一个字符是 '.' 或 '\0' 则,没有前导 0.
提示:上面的条件和下面的条件可以合并到一起。
例:
ip[i] == '0' && num == 0 && ip[i+1] != '.' && ip[i] != '\0'
*/
if(flag && ip[i+1] != '.' && ip[i+1] != '\0') return 0;
//如果是数值字符的话就把数值字符串转换成整数。
if(ip[i] >= '0' && ip[i] <= '9')
{
num = num * 10 + ip[i] - '0';
} else if(ip[i] == '.')
{
//如果是 '.' 则判断前面的数值是否在范围内。
if(num < 0 || num > 255) return 0;
//初始化 num 和 flag (关键)
num = flag = 0;
} else
//如果是其他字符则判定不符合。
return 0;
}
//判断最后一组数是否也在范围内。
if(num < 0 || num > 255) return 0;
//经过多重条件的过滤后判定符合,返回1。
return 1;
/*
函数的缺点:
如果你输入的ip是:1.2.3.4.5.6.7.8.9.0
结果也会判定符合。
*/
}
int main()
{
char ip1[31];
while(~scanf("%s",ip1))
printf("%c\n", Ip(ip1) ? 'Y' : 'N');
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复