Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
些麻烦了,懒得改。对于空格,只要while就能解决。
注意,string 和 char *是不一样的。
class Solution { public: void reverseWords(string &s) { stack<string> sk; if(s.size()==0)return ; int i = 0; int b = 0,e = 0; if(s.size()==1) { if(s[0] == ' ') { s = ""; return; } else return; } for(i = 0 ; i < s.size()-1;i++) { if(s[i] == ' '&&s[i+1] != ' ') { b = i+1; } else if(s[i] != ' ' && s[i+1] == ' ') { e = i+1; string tp = s.substr(b,e-b); sk.push(tp); } } if(s[s.size()-1] != ' ') { string tp = s.substr(b,s.size()); // if(b != e) { sk.push(tp); } } if(sk.empty()) { s=""; return; } s = sk.top(); sk.pop(); while(!sk.empty()) { string tp = sk.top(); s = s + ' '+tp; sk.pop(); } //s = s+' '; } };