用c++写一个代码解决下面的问题:给定一个字符串,翻转该字符串,翻转时单词中的字符顺序不变。例如,如果字符串为"Hello World",则翻转后为"World Hello"。单词间以一个或多个空格分隔。注意,字符串开头和结尾都可能有多个空格。
时间: 2024-04-16 08:05:01 浏览: 182
以下是用C++实现的代码:
```c++
#include <iostream>
#include <string>
#include <stack>
using namespace std;
void reverseWords(string& s) {
stack<string> stk;
string word = "";
for (int i = 0; i < s.size(); i++) {
if (s[i] != ' ') {
word += s[i];
} else {
if (word != "") {
stk.push(word);
word = "";
}
}
}
if (word != "") {
stk.push(word);
}
s = "";
while (!stk.empty()) {
s += stk.top() + " ";
stk.pop();
}
if (!s.empty()) {
s.pop_back();
}
}
int main() {
string s = " Hello World ";
cout << "Before reverse: " << s << endl;
reverseWords(s);
cout << "After reverse: " << s << endl;
return 0;
}
```
该代码使用了一个栈来保存每个单词,然后再将栈中的单词按照反序重新组合成一个新的字符串。其中,单词的分隔符为一个或多个空格,而字符串开头和结尾可能存在多个空格,需要在处理时进行特殊处理。
阅读全文