句子逆序C语言低端解法,易于理解。
1.收数据老生常谈。
2.将句子全部逆序。
3.将单词正序。
(这里有一个bug,最后一个词(原句子第一个词)总是收不到,所以写了个补丁。先记录空格的数量,当第二次读取的时候,读到最后一个空格的时候,直接跳进最后一个词,然后单独把最后一个词正序输出,此时用这个小功能内部的变量继承了主循环的变量,正序之后直接将输出第一个词。)
4.通过小功能内部的变量终值与字符串长度比较,以顺利跳出程序。

图片说明

#include<stdio.h>
#include<string.h>

int len=0;
char stru[10000],in,asb[10000];
int i,j,k;
int pau,pau2;
char reg;
int flag,flag2;
int esnum;

int main()
{


    //收入数据

    while (1)
    {
        scanf("%c", &in);
       // in = getchar();
        if (in == '\n')
            break;

        stru[len++] = in;
    }

    //句子全部逆序

    pau = len-1;
    for(i=0;i<len/2;i++,pau--)
    {
        reg = stru[i];
        stru[i] = stru[pau];
        stru[pau] = reg;
         //printf("%s",&stru[i]);
    }


    //统计空格数量
    for(i=0;i<len;i++)

    {
        if(stru[i] == ' ')
        esnum++;

    }


     //单词正序  
    i=0,j=0;
    for(i=0;i<len;i++)
    {
    //最后一个空格之前的单词正序
    if((stru[i] == ' '))
        {     
            for(k=0;k<j/2;k++,pau--)
            {
                reg = asb[k];
                asb[k] = asb[pau];
                asb[pau] = reg;


            }
        for(k=0;k<j;k++)
        {
                printf("%c",asb[k]);
        }


        j=0;
       printf(" ");
        flag++; 
       //  if(flag==esnum)
          //   continue;
        }



    else
        {
            asb[j]=stru[i];
            j++;
            pau=j-1;

        }

        if(flag==esnum)//空格数量比较,开启末尾单词正序小功能
        {
            flag2=i;
            pau2=len-1;
            for(k=flag2;k<(flag2+(len-flag2)/2);k++,pau2--)

            {
                reg = stru[k];
                stru[k] = stru[pau2];
                stru[pau2] = reg;

            }
        for(;flag2<len;flag2++)
            {

                printf("%c",stru[flag2]);

            }
            printf("\n");
            break;
        }

        if(flag2==len-1)//小功能内部的变量终值与字符串长度比较
        break;
 }


    return 0;

}