翻转单词顺序列
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:先将句子整体翻转,在按单词分别翻转
1 void reverseStr(string &str, int begin, int end) 2 { 3 while(begin<end) 4 { 5 char tmp=str[begin]; 6 str[begin]=str[end]; 7 str[end]=tmp; 8 ++begin; 9 --end; 10 } 11 } 12 string ReverseSentence(string str) 13 { 14 if(str.size()<=1)return str; 15 int begin=0; 16 while(str[begin]==' ')++begin; 17 for(int i=0; i<=str.size(); ++i) 18 { 19 if(i==str.size() || str[i]==' ') 20 { 21 reverseStr(str, begin, i-1); 22 begin=i+1; 23 } 24 } 25 reverseStr(str, 0, str.size()-1); 26 return str; 27 }