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