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

img

img


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

第一个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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632