该题出自《C语言程序设计——现代方法》第8章编程题14


编写程序颠倒句子中单词的顺序:

Enter a sentence: you can cage a swallow can't you?

Reversal of sentence: you can't swallow a cage can you?


思路:

利用getchar()函数自动读取缓存的特性,用循环逐个读取字符,当遇到句号、问好或者感叹号(称为“终止符”)时,循环终止并把终止符储存在一个char变量当中。

利用反向循环,遇空格符则终止。进入下一个循环,打印单词,接着寻找下一个空格符。


代码如下:

#include <stdio.h>
int main()
{
    int i, j, cnt;
    char ch,end;
    char sentence[N];
                                                          
    printf("Enter a sentence: ");
    i = 0;
    while(1) //逐个读取字符的循环
    {
        ch = getchar();
        if(ch == '.' || ch == '!' || ch == '?')
            break; //遇终止符
        sentence[i++] = ch;
    }
    end = ch; //保存终止符
    i--;   //将指针退回到最后一个字母
    printf("Reserval of sentence: ");
    while(i >= 0 )
    {
        for(cnt = 0;(i >= 0) && (sentence[i] != ' ');i--, cnt++)
        ;//寻找空格符
        for(j = i + 1;cnt > 0;cnt--)//打印单词
            printf("%c", sentence[j++]);
        if(i > 0)
            printf(" ");
        i--;//进入前一个单词
    }
    printf("%c\n", end);
                                                          
    return 0;
}

程序运行结果:

wKiom1NOLhTRycZ6AAD0rsh8_qY531.jpg

这是我暂时所能想到的方法,如果有更加简便的方法,欢迎一起讨论一下。