翻转单词顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。
注意头尾有空格时忽略

方法1:

利用stringstream的特性 空格自动截断

class Solution {
public:
    string reverseWords(string s) {
        if(s.length()==0) return s;
        string ans,temp;
        stringstream ss(s);//啊记住这个写法吧还是
        while(ss>>temp){//会按空格读取
            ans=temp+' '+ans;
        }
        ans.pop_back();
        return ans;
    }
};

方法2:

class Solution {
public:
    string reverseWords(string s) {
        vector<string> ans;//保存截取的一段段的字符串
        if(s.length()==0) return s;
        bool flag=false;
        int left=0,right=0;//双指针遍历
        while(right<s.size()){
            left=right;//左指针继续上次循环结束时右指针的地方开始
            while(left!=s.size()&&s[left]==' ') left++;//左指针移动到字符串的一个出现的位置
            right=left;//右指针从左指针处开始找结束
            while(right!=s.size()&&s[right]!=' ') right++;////左指针移动到字符串最后的位置+1
            if(left==right) break;//一样是表示都越界了 搜索结束了
            ans.push_back(s.substr(left,right-left));//截取后放到vector中
            flag=true;//设标志位是避免输入为“ ”的情况
        }
        if(!flag) return "";
        reverse(ans.begin(),ans.end());//倒叙输出,所以反转下
        string str_ans;
        for(string i:ans)
            str_ans+=i+' ';
        str_ans[str_ans.size()-1]='\0';//最后会多一个空格,所以赋值结束符
        return str_ans;
    }
};