翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"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; } };