关键在于清除多余空格:
class Solution { public: void reverseWords(string &s) { int begin = 0; for (; begin < s.size(); begin++) if (s[begin] != ' ') break; //find the leading spaces s.erase(0, begin); //delete the leading spaces int end = s.size() - 1; for (; end > -1; end--) if (s[end] != ' ') break; s.erase(end + 1, s.size() - end);//delete the after spaces for (int i = 0; i < s.size(); i++) { if (s[i] == ' ') { int count = 1; int j = i + 1; while (s[j] == ' ') { j++; count++; } if (count > 1) s.erase(i + 1, j - i - 1); i++; } } // delete tabbed spaces reverseSentence(s, 0, s.size()-1); //reverse the whole sentence reverseWord(s); } void reverseSentence(string &s,int begin,int end) { while(begin<end) { char temp=s[begin]; s[begin]=s[end]; s[end]=temp; begin++; end--; } } void reverseWord(string &s) { int flag=0; for(int begin=0;begin<=s.length();begin++) { if(s[begin]==' '||s[begin]=='\0') //find a word { reverseSentence(s,flag,begin-1); flag=begin+1; } } } };