解题思路: 没有说输入多少串字符串结束,结束条件是当输入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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论