反转单词顺序
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
题解:
对于此题,考虑主要的函数时string的reverse函数,其能将string中的字符串的顺序颠倒。
因此,首先先将str字符串进行颠倒,然后,将字符串中的单词,再次颠倒回来。
代码如下:
class Solution {
public:
string ReverseSentence(string str) {
/*int num=str.size();//剑指offer的代码
if(num==0||num==1)
return str;
reverse(str.begin(),str.end());
int i=0;
int j=0;
while(i<num){
if(str[i]==' '){
i++;j++;
}
else if(j==num || str[j]==' ')
{
reverse(str.begin()+i,str.begin()+j);
i=j;
}
else j++;
}
return str;
*/
//个人代码
int num=str.size();
if(num<2) return str;
reverse(str.begin(),str.end());//先行颠倒字符串顺序
auto i=0,j=0;
while((j=str.find(' ',i))!=string::npos){//对空格前的单词进行颠倒
reverse(str.begin()+i,str.begin()+j);
i=j+1;
}
reverse(str.begin()+i,str.end());//最后的单词若无空格,需要单独颠倒一次。
return str;
}
};