题:输入一个英文字符串s,翻转句子中单词的顺序,但单词内的字符顺序不变,标点符号按字符处理,例如“I am a student.” 则输出结果为“student. a am I”。
注意:如果字符串的起始和末尾包含空格,则输出结果不包含;若两个相邻单词之间包含多个空格,则仅输出一个空格。
分析:建立一个字符串栈,将一个完整的单词视为一个整体,将给定字符串全部压入栈中,然后逐个弹出,在单词之间添加一个空格。
class Solution
{
public:
string reverseWords(string s)
{
stack<string> words;
string ans="";
string word="";//单词
for(int i=0;i<s.size();i++)
{
word="";
while(i<s.size() && s[i]!=' ')
{
word+=s[i];
i++;
}
if(word.size()>0)
{
words.push(word);
}
}
while(!words.empty())
{
ans+=words.top();
ans+=" ";
words.pop();
}
ans.erase(ans.end()-1);
return ans;
}
};