给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 500000 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有 1 个空格。
输入样例:
Hello World Here I Come
结尾无空行
输出样例:
Come I Here World Hello
结尾无空行
来源:
来源:PTA | 程序设计类实验辅助教学平台
链接:https://pintia.cn/problem-sets/14/exam/problems/812
提交:
题解:
#include<stdio.h>
#include<string.h>
int main() {
char word[500001];
gets(word);
// head 和 tail 一前一后共同确定一个单词
int head = -1;
int tail = -1;
// isPrintBlank 判断是否需要输出空格:[0]输出空格 [1]不输出空格
int isPrintBlank = 1;
// 倒序遍历字符串,依次输出每个单词
for (int i = (int) strlen(word) - 1; i >= 0; i--) {
// 单词尾
if (word[i] != ' ' && tail == -1) {
tail = i;
}
// 单词头
if ((word[i] != ' ' && word[i - 1] == ' ') || i == 0 && tail != -1) {
head = i;
}
// 输出当前单词
if (head != -1 && tail != -1) {
if (isPrintBlank == 0) {
putchar(' ');
}
for (; head <= tail; head++) {
printf("%c", word[head]);
}
isPrintBlank = 0;
tail = -1;
head = -1;
}
}
return 0;
}