c++string reverse
时间: 2025-05-11 17:20:44 浏览: 17
### C++ 中字符串反转的实现方法
在 C++ 编程语言中,可以利用标准库中的函数或者手动编写逻辑来完成字符串的反转操作。以下是几种常见的实现方式。
#### 方法一:使用 `std::reverse` 函数
C++ 的 `<algorithm>` 头文件提供了 `std::reverse` 函数,可以直接用于反转容器的内容,包括字符串。
```cpp
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "the sky is blue";
// 使用 std::reverse 反转整个字符串
std::reverse(str.begin(), str.end());
std::cout << "Reversed string: " << str << std::endl;
return 0;
}
```
此方法简单高效,适用于快速反转整个字符串的情况[^1]。
---
#### 方法二:手动遍历并交换字符位置
如果不希望依赖于标准库函数,则可以通过手动遍历来实现字符串反转:
```cpp
#include <iostream>
#include <string>
void reverseString(std::string& str) {
int n = str.length();
for (int i = 0; i < n / 2; ++i) {
char temp = str[i];
str[i] = str[n - i - 1];
str[n - i - 1] = temp;
}
}
int main() {
std::string str = "the sky is blue";
reverseString(str);
std::cout << "Manually reversed string: " << str << std::endl;
return 0;
}
```
这种方法通过逐个交换首尾字符的位置实现了字符串的反转[^2]。
---
#### 方法三:按单词顺序反转字符串
如果目标是按照单词顺序反转字符串(而非单个字符),则需要额外处理空格分隔符以及可能存在的多余空格情况。以下是一个完整的解决方案:
```cpp
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
#include <algorithm>
// 去除多余的空格并将字符串分割成单词向量
std::vector<std::string> split(const std::string& s) {
std::istringstream iss(s);
std::vector<std::string> words;
std::string word;
while (iss >> word) {
words.push_back(word);
}
return words;
}
// 将单词向量重新组合为字符串
std::string joinWords(const std::vector<std::string>& words) {
std::string result;
for (size_t i = 0; i < words.size(); ++i) {
if (!result.empty()) {
result += " ";
}
result += words[i];
}
return result;
}
std::string reverseWordsInString(const std::string& s) {
auto words = split(s); // 获取单词列表
std::reverse(words.begin(), words.end()); // 反转单词顺序
return joinWords(words); // 组合回字符串
}
int main() {
std::string inputStr = "the sky is blue";
std::string outputStr = reverseWordsInString(inputStr);
std::cout << "Reversed words in string: " << outputStr << std::endl;
return 0;
}
```
上述代码首先将输入字符串拆分为单词序列,随后反转该序列,并最终将其重组为目标字符串[^3]。
---
### 性能分析与注意事项
- **时间复杂度**:对于整体字符串反转或单词级反转,其时间复杂度均为 O(n),其中 n 是字符串长度。
- **空间复杂度**:基于原地修改的操作通常具有较低的空间开销;而涉及辅助数据结构(如向量存储单词)的方式可能会增加内存消耗。
- 需要注意的是,在实际应用中应考虑边界条件,例如全为空白字符的字符串、仅含单一单词等情况。
---
阅读全文
相关推荐


















