该题出自《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; }
程序运行结果:
这是我暂时所能想到的方法,如果有更加简便的方法,欢迎一起讨论一下。