【问题】牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
【思路】使用STL中的find函数来查找每个空格的位置,由于find函数只能查找一个位置,因此我们使用循环,每当查找结束后,将查找的出发点begin赋值为end+1,接着就可以查找到下一个空格的位置了,这样就可以得到STL版的split函数,虽然比较麻烦,但是C++标准库是没有split函数的,必须这么写!接着就是reverse函数进行反转,可以直接使用库函数!当然自己也可以使用swap函数利用首尾指针实现!
class Solution { public: string ReverseSentence(string str) { reverse(str.begin(), str.end()); // 整体反转 int begin = 0, end; while((end=str.find(' ', begin)) != string::npos){ reverse(str.begin()+begin, str.begin()+end); begin = end + 1; } reverse(str.begin()+begin, str.end()); // 最后一个空格到最后字符串结束 return str; } };