0136于佳扬


私信TA

用户名:Dirge0136

访问量:15351

签 名:

等  级
排  名 551
经  验 4382
参赛次数 1
文章发表 46
年  龄 0
在职情况 学生
学  校 重庆理工大学
专  业

  自我简介:


解题思路:

注意事项:

参考代码:

#include

#include

int stra,strb,strc,strd;//在这里先定义好

char a[5],b[5],c[5],d[5];//这里的四个数字用来表示四个数字

char m[30];

void length();//这个函数用来测量数字所对应的长度

void judge();//这个函数用来判断是否符合要求

int main()

{

    while(scanf("%s",m)!=EOF)//输入字符串

    {

        judge(m);//将这个字符串带到判断函数中去

    }

    return 0;

}

void length()//这里是计算长度的函数

{

    int i;

    stra=0;strb=0;strc=0;strd=0;;i=0;//stra指第一个数字的长度,strb,strc,strd以此类推

    while(m[i]!='.')//这里的判断条件就是在"."出来之前的字符串存到数组a里面去

    {

        a[stra]=m[i];

        i++;

        stra++;//每存完一个加1

    }

    i++;//这里必须要加1

    while(m[i]!='.')//后面都是同理

    {

        b[strb]=m[i];

        i++;

        strb++;

    }

    i++;

    while(m[i]!='.')

    {

        c[strc]=m[i];

        i++;

        strc++;

    }

    i++;

    while(m[i]!='\0')//最后一个不可以用"."作为循环结束判断标志,只能用'\0'作为结束判断标志

    {

        d[strd]=m[i];

        i++;

        strd++;

    }

}

void judge ()//判断函数,同样定义成void型,返回时为空

{

    if(strlen(m)>15)//因为题目说最大数字为255,所以字符串最大长度为15,如果比15大,那就肯定不符合题意

    {

        printf("N\n");

        return ;//因为定义成void函数,所以返回空的

    }

    else

    {

        length();//否则对这个字符串进行长度计算

    }

    int suma,sumb,sumc,sumd;//suma是指a数组所存的数字所代表的数,sunb等同理以此类推

    int i;

    suma=0;sumb=0;sumc=0;sumd=0;//开始时先赋值为0

    for(i=0;i<stra;i++)

    {

        if(a[i]>='0'&&a[i]<='9')//这里判断时必须带上0。如果出现"001"这种情况后面有判断方法,带上0是防止0在十位或者个位出现

        {

            suma=suma*10+(a[i]-48);//这里因为a[i]是字符型变量,所对用的数字必须减去0所对应的ASCII码值

            if(suma==0)//如果出现"001"类似情况,suma就会等于0,即输出N

            {

                printf("N\n");

                return ;

            }        

        }

        else

        {

            printf("N\n");

            return ;

        }

    }

    if(suma>255)//这里判断这个数字是否大于255,大于255就输出N

    {

        printf("N\n");

        return ;

    }

    for(i=0;i<strb;i++)//后面都是同理

    {

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

        {

            sumb=sumb*10+(b[i]-48);

            if(sumb==0)

            {

                printf("N\n");

                return ;

            }        

        }

        else

        {

            printf("N\n");

            return ;

        }

    }

    if(sumb>255)

    {

        printf("N\n");

        return ;

    }

    for(i=0;i<strc;i++)

    {

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

        {

            sumc=sumc*10+(c[i]-48);

            if(sumc==0)

            {

                printf("N\n");

                return ;

            }        

        }

        else

        {

            printf("N\n");

            return ;

        }

    }

    if(sumc>255)

    {

        printf("N\n");

        return ;

    }

    for(i=0;i<strd;i++)

    {

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

        {

            sumd=sumd*10+(d[i]-48);

            if(sumd==0)

            {

                printf("N\n");

                return ;

            }        

        }

        else

        {

            printf("N\n");

            return ;

        }

    }

    if(sumd>255)

    {

        printf("N\n");

        return ;

    }

    printf("Y\n");

    return ;

}


 

0.0分

3 人评分

  评论区

这太麻烦了,虽然楼主思路清晰,但希望还是可以将代码改进。
2020-12-15 17:24:24
suma...sumb...这里用数组+循环是不是更简洁?
2020-12-10 12:28:02
  • «
  • 1
  • »