题目地址:https://oj.leetcode.com/problems/reverse-words-in-a-string/
描述:
给定一个字符串S, 以单词为单位逆序输出,如输入:"the sky is blue",则输出“blue is sky the".
单词的定义:连续的非空白字符序列。
输入字符可以以空白字符开头和结尾。
如果单词之前存在多个空白字符,逆序输出时只输出一个空白字符 。
思路:
从头到尾扫描字符串中的每个字符,将连续非空白字符合并为一个单词word,遇到空白字符认为上一单词结束,将其入栈。扫描完后单词依次出栈组成新的逆序字符串。
C++代码:
void reverseWords(string &s)
{
stack<string> stk;
if (s.size() == 0) return;
string::size_type size = s.size();
string word;
for (string::size_type i = 0; i < size; ++i) {
if (isblank(s[i])) { // 遇到空格则将空格之前的单词入栈
if (word.size()) {
stk.push(word);
word.clear();
}
} else {
word.push_back(s[i]);
}
}
// 如果字符串s不是以空格结尾,将最后一个word入栈
if (!isblank(s[s.size()-1])) {
stk.push(word);
}
s = "";
while(!stk.empty()) {
s += stk.top();
stk.pop();
s += " ";
}
// 删除末尾空格
if (s.size()) { s.erase(s.size()-1); }
}