思路:根据栈的原理先进后出,使用栈来依次保存每个单词,然后再依次从栈中取出每个单词
cpp
class Solution {
public:
string reverseMessage(string message) {
int left = 0;
int right = message.size()-1;
//消除字符串前后多余的空格,比如字符串" hello world! "
while(left<=right&&message[left]==' ') left++;
while(right>=left&&message[right]==' ') right--;
stack<string>sk;
string str;//用于保存单个字符
//从第一个单词开始压入栈中
while(left<=right){
//遇到空格并且前一个字符不是空格则判定之前的就为单个单词,str.size()>0用于判定之前的一个字符不为空格
if(message[left]==' '&&str.size()>0){
sk.push(str);
str.clear();
}
//生成单词
else if(message[left]!=' ') str+=message[left];
left++;
}
//最后一个单词遇不到空格了,单独压入栈中
sk.push(str);
string ret;
while(!sk.empty()){
ret+=sk.top();//从上至下取出栈中每个单词
ret+=" ";//每个单词之后添加空格
sk.pop();//弹栈
}
ret.pop_back();//最后一个单词之后跟了一个空格,弹出空格
return ret;
}
};