c语言字符串查找指定ip,IP判断 (C语言代码)

解题思路:用字符串分割函数strtok(),以.去分割字符串,然后判断分割的每一个字符串是否合法,如果字符串中存在0-9以外的字符,非法,停止判断;如果字符串转换为数字之后超过255,非法,停止判断;

注意事项:

参考代码:#include 

#include 

int main()

{

char s[35];

int i,k,y,n;

char *t;

while(scanf("%s",s)!=EOF)

{

if(strlen(s)>15) //合法的IP地址的字符串不会超过15位

{

printf("N\n");

continue;

}

y=1;

t=strtok(s,"."); //用.分割字符串 ,分割之后把首地址赋值给t

while( t!= NULL )

{

n=0; k=1;

for(i=0;t[i];i++) //判断t是否合法

{

if(t[i]>='0' && t[i]<='9')

n=n*10+t[i]-'0';

else //如果不是数字0-9,则是非法的,不用继续

{

k=0; break;

}

if(t[0]=='0' && strlen(t)!=1) //如果ip中出现01,或者012这种情况,则是不合法的

{

k=0;break;

}

}

if(k==0 || n>255) //如果t中的字符是非法的或者转换为数字超过255,则是非法的,不用继续

{

y=0; break;

}

t=strtok(NULL,"."); //继续用.分割字符串 ,分割之后把首地址赋值给t

}

if(y==1) printf("Y\n");

else printf("N\n");

}

return 0;

}

几个月后,当有人问我这个程序时,哪个写得比较简单时,我看了其他大佬写的程序,写得很好,但是无法判断形如:12.23.123.23a这种不合法的IP,我修改了一下程序,可以判断这种不合法的IP;另外由于宏定义没有加上括号,也无法判断形如:12.-123.23.34,这种不合法的IP,我也做了修改。程序如下:#include

#include

#define Judge(n) ((n>=0 && n<=255)?1:0)

int main()

{

char IP[30];

int a, b, c, d;

char e;

while(scanf("%s",IP) != EOF)

{

//IP地址按如下格式获取应该获取到4个值,否则不是IP。

if(sscanf(IP, "%d.%d.%d.%d%c", &a, &b, &c, &d,&e) == 4)

{   //如果最后一个数字后面还有其他字符,则字符肯定能获取到,并保存到变量e中

//这样sscanf函数返回就应该是5,而不是4了 ,这样可以把不合法的ip去掉,

// 例如:12.23.34.54a ,这种不合法的IP

if(Judge(a) && Judge(b) && Judge(c) && Judge(d))

printf("Y\n");

else

printf("N\n");

}

else

printf("N\n");

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值