Mister-小方


私信TA

用户名:1104986125

访问量:250382

签 名:

如此英俊为哪般

等  级
排  名 4
经  验 37264
参赛次数 1
文章发表 68
年  龄 19
在职情况 学生
学  校 大连交通大学
专  业 车辆工程

  自我简介:

TA的其他文章

解题思路:
1.本题就是将整个ip地址当字符串看,这样用.去当结束判断一个数的标志。

2.比较数是否在范围内,其实比较相应的ascii就可以了。

参考代码:

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
int check(char x[])
{
    int i,j=0,k=0;
    char num[10][10];
    for(i=0;x[i]!='\0';i++)
    {
        if(!(x[i]<='9'&&x[i]>='0'||x[i]=='.'))
            return 0;
        if(x[i]!='.')                       //还没到下个数
            num[j][k++]=x[i];
        else                               //说明马上就要到下个数了
        {
            if(num[j][0]=='0'&&k!=1)     //如果第一个数是0,直接结束,判断不符合要求
             return 0;           //如果就是0.其实也是满足的,就是k=1,且值为0的情况
            k=0;                         //初始化
            j++;                         //换到下一个数
        }
    }
    for(j=0;j<4;j++)
    {
        if(!(atoi(num[j])>=0&&atoi(num[j])<=255)) //满足0到255
            return 0;
    }
    return 1;
}
int main(){
    char x[30];
    while(scanf("%s",x)!=EOF)                         //接收
    {
        printf("%c\n",check(x)?'Y':'N');          //调用函数判断
    }
    return 0;
}

看看大家还有什么不懂得,请在下方评论区留言

 

0.0分

3 人评分

  评论区

被调函数中为啥要用二位数组?
2019-03-30 10:36:12
第八行的括号错了,用成了中文模式下的。
2019-03-02 20:42:45
if(num[j][0]=='0'&&k!=1)这里的k!=1是用来干什么的呀,我觉得完全没必要鸭
2018-11-26 00:57:14
  • «
  • 1
  • »