给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。
输出格式:每个测试用例的输出占一行,输出倒序后的句子。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
这个题目呢,对我来说,主要的难点在于读进来数据,囧。是时候补充一下了,在另外一篇里面好了。
这个题目,没有说保证前面有几个空格,只是保证了单词之间有一个空格和最后没有多余的空格。
和leetcode上的一道题很像,这里直接采用的是leetcode上面的做法。
主要是讲string->vector->string的做法,可以直接采用reverse()函数,需要
#include<algorithm>
代码如下:
…
#include<stdio.h>
#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(void)
{
string a;
//char a[80];
vector<string> res;
int i = 0;
//gets(a);//
getline(cin,a);
int len = a.length();
while(a[i]==' ' && i<len) i++;//¿ªÍ·µÄ¿Õ¸ñ£¿½áβÒѾ±£Ö¤£¬²»ÓÃÈ¥³ý½áβ¿Õ¸ñ
while(i<len)
{
int start = i;
if(a[start] != ' ')
{
//±£Ö¤ÖмäÖ»ÓÐÒ»¸ö¿Õ¸ñ£¬ÕâÀï²»ÓÃÔÙÅжÏ
while(i<len && a[i] != ' ') i++;
res.push_back(a.substr(start, i-start));
}
else
{
while(i<len && a[i] == ' ') i++;
res.push_back(" ");
}
}
reverse(res.begin(),res.end());
a="";
for(int jj = 0; jj<res.size(); jj++)
{
cout<<res[jj];
}
return 0;
}