PAT1009

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

输出格式:每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello



思路:用string数组S[]表示空格间隔开的每一个字符串,用char数组K[]表示空格
原句子的顺序为S[0]K[0]S[1]K[1].....K[N-1]S[N]
逆转后的顺序为S[N]K[N-1].....K[1]S[1]K[0]S[0]



所以解决问题的关键是:如何顺序保存S[] 和 K[] 然后再逆序输出

# include<iostream>
# include<string>
using namespace std;
int main()
{
string s[1000],str;
char k[1000];
int h=0,begin=0,end,i,j;   ///h是为了能顺序保存K[] 与S[]    //begin end 是为了记录被空格隔开的字符串长度
getline(cin,str);               //输入带空格的字符串
for(i=0;i<str.length();i++)
{
if(str[i] ==' ')               //遇到空格后  顺序保存当前空格 与 空格前的字符串
{
end = i;
k[h] =' ';
for(j=begin;j<end;j++)
{
s[h].push_back(str[j]);
}
h++;
begin = i+1;
}
}
for(j=begin;j<str.length();j++)   //由于最后一个字符串的后面是没有空格的  所以要分开讨论
{
s[h].push_back(str[j]);
}
cout<<s[h];
for(j=h-1;j>=0;j--)
{
cout<<k[j]<<s[j];
}
return 0;
}

posted on 2017-01-13 11:32  qq77530202  阅读(73)  评论(0编辑  收藏  举报