Copy帅哥


私信TA

用户名:DemonAngell

访问量:1906

签 名:

等  级
排  名 36718
经  验 361
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 内蒙古农业大学
专  业

  自我简介:

TA的其他文章

解题思路:





注意事项:





参考代码:

#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 人评分

  评论区