给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
NOTE:
1.输入:字符串输入用cin读取不了空格,可以用getline(cin,str)输入字符串,可以看我另一篇博客详细记录https://blog.csdn.net/qq_44985985/article/details/90417468
2.倒序输出,整体思路:
(1)可以定义一个字符数组,先令cnt为字符串末尾位置
(2)当字符串从后往前遍历时,遇到空格先停下来,此时位置为i,这里用cnt标记每个单词结尾的下一个位置
(3)将i+1到cnt之间的单词赋值给新的字符数组a
(4)当从后往前遍历到第一个单词时,应注意此时条件不一样,这种情况为i==0时(看代码)
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;
char a[81];
int cnt,k=0;
getline(cin,s);
cnt=s.length();//利用cnt标记每个单词结尾的下一个位置
for (int i=s.length(); i>=0; i--)
{
if (i==0)
{
for (int j=i; j<cnt; j++)
{
a[k]=s[j];//i与cnt之间夹得是单词
k++;
}
}
else if (s[i]==' ')
{
for (int j=i+1; j<cnt; j++)
{
a[k]=s[j];//将空格之间的单词赋给字符数组
k++;
}
a[k]=' ';k++;cnt=i;
}
else if (s[i]!=' ')
continue;
}
for (int i=0; i<s.length(); i++)
{
printf("%c",a[i]);
}
return 0;
}