君应怜


私信TA

用户名:15121662051

访问量:3026

签 名:

等  级
排  名 8849
经  验 1137
参赛次数 2
文章发表 5
年  龄 0
在职情况 学生
学  校 冀中职业学院
专  业

  自我简介:

TA的其他文章

C++与C分别描述
浏览:414

解题思路:

----------------------------------------------

每个IP字段不允许前导为0

每个IP字段不允许出现负号

如果每个IP字段第一位不是数字则判定N

如果每个IP字段不属于0~255则判定N

---------------------------------------------


参考代码:


解法一:

#include<stdio.h>

int main(void)

{

    char s[30];

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

    {

        int i,j=0;

        for(i=0;s[i]!='\0';i++)

        {

            int sum = 0;//记录每个IP字段总大小

            if(s[0]=='0'&&s[1]!='.')break;//判定第一个字段前导为0时

            if(s[i]<'0'||s[i]>'9')//大前提每个字段第一位数必须是0~9之内

                 {break;  }

           else{

                    while(s[i]!='.'&&s[i])//小前提当前字符不是小数点且字符为0~9时

                    {

                        sum = 10*sum+s[i] - '0';//转换数字并累加

                           i++;

                     }

                if(s[i]=='.'&&s[i+1]=='0'&&s[i+2]!='.')break;//判定后三个字段前导为0时

                if(sum>=0&&sum<=255){j++;}//记录符合条件的字段

                  }

            }

if(j==4)printf("Y\n"); //如果四个字段都正确,则输出Y

else printf("N\n");

    }

}

-------------------------------------------------------------------------------

解法二:

bug:无法判断前导0

#include <stdio.h>

#include <string.h>

#define p(n) (n>=0 && n<=255)       //定义带参数的宏

int main(void)

{    char x[31];

    int a,b,c,d,e;//结合sscanf返回值特性,使用变量e排除输入第四个小数点判对情况

    while(gets(x)!='\0')

{

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

printf("%c\n",(p(a) && p(b) && p(c) && p(d))?'Y':'N');

else

printf('N\n');

}

}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区