解题思路:
注意事项:
参考代码:
#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 人评分
简单的a+b (C语言代码)浏览:578 |
A+B for Input-Output Practice (II) (C语言代码)浏览:1033 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:483 |
求组合数 (C语言代码)浏览:1196 |
淘淘的名单 (C语言代码)浏览:1162 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:647 |
Hello, world! (C语言代码)浏览:911 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:539 |
分解质因数 (C++代码)浏览:1551 |
小O的数字 (C语言代码)浏览:1483 |