解题思路:





注意事项:





参考代码:

#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');

}


点赞(1)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论