将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
接口说明
/**
* 反转句子
*
* @param sentence 原句子
* @return 反转后的句子
*/
public String reverse(String sentence);
输入描述:
将一个英文语句以单词为单位逆序排放。
输出描述:
得到逆序的句子
示例1
输入
I am a boy
输出
boy a am I
思路:翻转句子可以翻转整个句子,然后再翻转每个单词。
#include<iostream>
#include<string>
#include<vector>
usingnamespacestd;
classReverse{
public:
stringreverseSentence(string A,intn)
{
reverseWord(A,0,n-1);
inti=0,j=0;
while(i
{
while(i
i++;
if(i>=n)
returnA;
j=i;
while(i
i++;
if(i>=n)
{
reverseWord(A,j,n-1);
returnA;
}
reverseWord(A,j,i-1);
}
returnA;
}
voidreverseWord(string &A,intlow,inthigh)
//¾Ö²¿ÄæÐòº¯Êý
{
if(low>=high)
return;
chartemp;
while(low
{
temp=A[low];
A[low]=A[high];
A[high]=temp;
low++;
high--;
}
}
};
intmain()
{
stringarr("dog loves pig");
Reverse a;
a.reverseSentence(arr,13);
cout<<arr;
return0;
}
另一种:利用vector
#include<iostream>
#include<vector>
usingnamespacestd;
intmain(){
string s;
vector<string> vs;
while(cin >> s)
vs.push_back(s);
for(inti = vs.size()-1; i > 0; --i)
cout << vs[i] << " ";
cout << vs[0] << endl;
return0;
}
另一种:利用sstream
#include <iostream>
#include <string>
#include <sstream>
usingnamespacestd;
int main() {
string s;
getline(cin,s);
stringstream ss(s);
string res="", tmp;
while(ss>>tmp) {
if(res=="")
res=tmp;
else
res=tmp+" "+res;
}
cout<<res;
return 0;
}