给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
关键之处:
- 用一个字符指针p来遍历整个字符串,用另一个字符指针q来输出单个单词。
- 要时刻注意字符指针的结束条件
- p指针指向开头str的时候结束,*p == 空格 才输出单词,指向第一个的时候已经遇不到空格了。
- q指针等于空格说明一个单词结束了,等于'\0'说明整个字符串都结束了,那个单词肯定也结束了。
代码:
#include <stdio.h>
#include <string.h>
#define MAXN 81
int main(void) {
char str[MAXN];
char *p, *q;
gets(str);
/*输出除了第一个单词之外的所有单词*/
for ( p = str + strlen(str) - 1; p != str; p-- ) //当p指向str之时,退出循环。
if ( *p == ' ' ) { //从后向前,每次遇到空格就输出一个单词。
for ( q = p + 1; *q != ' ' && *q; q++ ) //遇到空格或'\0'说明一个单词结束。
printf("%c", *q); //逐个输出字母。
printf(" "); //每个单词后以空格间隔。
}
/*输出第一个单词*/
for ( q = str; *q != ' ' && *q; q++ )
printf("%c", *q);
return 0;
}