反转字符串

【问题】牛客最近来了一个新员工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;
    }
};
原文地址:https://www.cnblogs.com/zhudingtop/p/11398848.html