给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
解题思路:遍历数组,遇到空格一律替换为结束符,遇到单词用另一个数组记录首字母位置,最后逆序输出即可。
代码如下:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[500001] = { 0 };
int index[300001] = { 0 };
int k = 0, flag = 1;
cin.getline(str, 500001);
int leng = strlen(str);
for (int i = 0; i < leng; i++)
{
if (str[i] != ' ')
{
if (flag == 1)//表示前一个位置是空格
{
index[k++] = i;//记录每一个单词的首字母位置
flag = 0;
}
}
else
{
str[i] = '\0';//空格全部替换为结束符
flag = 1;
}
}
for (int i = k - 1; i >= 0; i--)
{
if (i != 0)
cout << str + index[i] << " ";
else
cout << str + index[i];
}
return 0;
}