黑砖


私信TA

用户名:dotcpp0596940

访问量:409

签 名:

等  级
排  名 364
经  验 5079
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路: 没有说输入多少串字符串结束,结束条件是当输入End of file时结束程序

               “End of file”这个字符串中间有空格,在while()中采用gets获取字符串

                首先要判断退出条件即:strcmp(a, b) == 0

                 直接 return 0 退出就可。



                 特殊一点是负数的情况,正常区间是[0,255],由负号就退出循环

                if (a[i] == '-') {
                printf("N\n");
                flag = 1;//这里的flag需要有,for循环主要判断 N 的特殊条件,输出Y的条件在for循环外
                break;
            }



               有字母就退出,这里只有小写字母,只判断了小写字母

               if (a[i] >= 'a' && a[i] <= 'z') {
                printf("N\n");
                flag = 1;//同样有flag 因为这里发现错误直接退出不管后面的情况
                break;
            }

                对于 '.'的处理 ,3个点分割4个数值,每个数字独立计算是否符合范围,这就需要一位一位的添加

                组合成一个数字t,用t判断是否满足范围。

                 if (a[i] == '.') {
                if (t > 255) {
                    printf("N\n");
                    t = 0;// t重置为0是因为点分隔的每个数字相互独立
                    flag = 1;
                    break;
                }
                else
                    t = 0;// t重置为0是因为点分隔的每个数字相互独立
                continue;
            }


                对数字的处理中,只要是数字就放入t,每放入一个先把上个t*10,各个位都往前进一位
            if (a[i] >= '0' && a[i] <= '9') {
                t *= 10;
                c = a[i]-'0';//因为是字符串形式,获取当前i下标所对应的int形数字的值,把它加到t的个位
                t += c;
            }

            对于正确解的处理即Y

           由flag标记区分是正常for循环结束退出,还是直接break终止了for的循环。

          flag=1,是由break退出for循环,即之前的判断条件   符号,字母,和前三段大于了255

         flag=0时 仅需要判断最后一段是否满足题意,因为是正常退出

        在flag=0的判断中同样需要重置t=0,为下一次while循环所接收的数字做准备

         

            if (flag == 1) {
            flag = 0;
            continue;
        }
        else if (flag == 0) {
            if (t > 255) {
                printf("N\n");
                t = 0;
            }
            else if (t <= 255) {
                printf("Y\n");
                t = 0;
            }

                

注意事项:

参考代码:

#include<stdio.h>
#include<string.h>
int main() {
    char a[100], b[100] = { "End of file" };
    int t=0, flag = 0,c=0;
    while (gets(a)) {
        if (strcmp(a, b) == 0)
            return 0;
        for (int i = 0; i < strlen(a); i++) {
            if (a[i] == '-') {
                printf("N\n");
                flag = 1;
                break;
            }
            if (a[i] >= 'a' && a[i] <= 'z') {
                printf("N\n");
                flag = 1;
                break;
            }
            if (a[i] == '.') {
                if (t > 255) {
                    printf("N\n");
                    t = 0;
                    flag = 1;
                    break;
                }
                else
                    t = 0;
                continue;
            }

            if (a[i] >= '0' && a[i] <= '9') {
                t *= 10;
                c = a[i]-'0';
                t += c;
            }
        }
        if (flag == 1) {
            flag = 0;
            continue;
        }
        else if (flag == 0) {
            if (t > 255) {
                printf("N\n");
                t = 0;
            }
            else if (t <= 255) {
                printf("Y\n");
                t = 0;
            }
        }
    }
    getchar(); getchar();
    return 0;
}

 

0.0分

1 人评分

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

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区