C++中反转字符串可通过std::reverse、双指针或反向迭代器实现,分别适用于高效操作、底层理解与保留原串场景。

在C++中,反转字符串是一个常见操作,可以通过标准库中的 reverse 算法快速实现,也可以手动编写逻辑完成。本文将介绍几种常用的字符串反转方法,帮助你灵活应对不同场景。
使用 std::reverse 反转字符串
C++标准库提供了 std::reverse 算法,定义在
对 std::string 使用 std::reverse 的示例如下:
#include#include #include int main() { std::string str = "hello"; std::reverse(str.begin(), str.end()); std::cout << str << std::endl; // 输出: olleh return 0; }
说明: str.begin() 指向第一个字符,str.end() 指向末尾的后一个位置,std::reverse 在这两个迭代器之间进行原地反转。
立即学习“C++免费学习笔记(深入)”;
手动实现字符串反转
如果不使用标准算法,也可以通过双指针方式从两端向中间交换字符来实现反转。
#include#include void reverseString(std::string& str) { int left = 0; int right = str.length() - 1; while (left < right) { std::swap(str[left], str[right]); left++; right--; } }
int main() { std::string str = "world"; reverseString(str); std::cout << str << std::endl; // 输出: dlrow return 0; }
这种方法时间复杂度为 O(n/2),空间复杂度为 O(1),适合理解底层原理或在受限环境中使用。
反转C风格字符串(char数组)
对于传统的C风格字符串(以'\0'结尾的字符数组),同样可以使用双指针方式反转。
#include#include void reverseCString(char* str) { int len = strlen(str); int left = 0, right = len - 1; while (left < right) { std::swap(str[left], str[right]); left++; right--; } }
int main() { char str[] = "abcde"; reverseCString(str); std::cout << str << std::endl; // 输出: edcba return 0; }
注意:必须传入可修改的字符数组,不能是字符串字面量(如 "hello")。
使用反向迭代器创建反转副本
如果不想修改原字符串,而是想生成一个反转后的新字符串,可以使用反向迭代器。
#include#include int main() { std::string original = "example"; std::string reversed(original.rbegin(), original.rend()); std::cout << reversed << std::endl; // 输出: elpmaxe return 0; }
这种方式简洁安全,适用于需要保留原始数据的场景。
基本上就这些。根据实际需求选择合适的方法:优先使用 std::reverse 提高开发效率,理解手动实现有助于掌握算法本质。不复杂但容易忽略细节,比如迭代器范围和字符数组的可写性。










