m0_74020826 2022-10-29 18:57 采纳率: 83.3%
浏览 50
已结题

能解释下这个代码吗,从第一个while那就不理解

img

img


从csdn上看到别人的答案,如有冒犯请联系我立删
能解释下这个代码吗,从第一个while那就不理解

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2022-10-29 19:01
    关注

    第一个while用来输入多个字符串,循环终止条件是换行。
    第二个while用来逆序输出数组中的字符串。

    
    #include<stdio.h>
    #include <math.h>
    #include<string.h>
    
    int main(void)
    {
        char str[500001];
        char* p;
        int i, len, flag = 0;                            //flag检测空格
    
        gets(str);
    
        len = strlen(str);                                //字符串长度
    
        for (i = len; i >= 0; i--) {                    //从字符串末尾倒着读
            if (str[i] == ' '&& flag) {                    //当读到空格且是单词前一位的空格时
                p = &str[i];                            //指针指向空格所在地址
                printf("%s", p + 1);                    //输出p+1字符串
                if (str[0]!=' ') printf(" ");            //避免前有空格多输出空格(第3测试点)
                *p = '\0';                                //p后字符串扔掉
                flag = 0;                                //再碰到空格不输出
            }
            if (str[i] == ' ') {                        //仅仅只有空格
                p = &str[i];
                *p = '\0';
                flag = 0;                                
            }
            if (str[i]!=' ' && str[i]!='\0') flag = 1;    //读到非空格且不是'\0'('\0'也是非空格,小心),重新立flag
        }
        p = &str[0];
        printf("%s", p);                                //读第一个单词
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用