在编程中,字符串反转是一个经典问题。今天,我将分享两个简单的 C++ 代码来实现字符串反转功能。
自定义双指针实现
#include <iostream>
#include <algorithm>
using namespace std;
void Reverse(char arr[], int len) {
char* l = arr; // 指针指向首地址
char* r = arr + len - 1; // 指针指向尾地址
while (l < r) { // 双指针思维,两边向中间移动
char temp = *l;
*l = *r;
*r = temp;
l++;
r--;
}
}
int main() {
char arr[100] = "hello world";
int len = strlen(arr);
Reverse(arr, len);
cout << arr;
return 0;
}
-
Reverse 函数 :这是实现字符串反转的核心函数。它接收两个参数,一个是字符数组的首地址(arr),另一个是数组的长度(len)。在函数内部,我们使用了两个指针,
l
指针指向数组的首地址,r
指针指向数组的尾地址。 -
*双指针交换元素 :通过 while 循环,当
l
指针小于r
指针时,循环继续。在循环体内,我们交换l
和r
指针所指向的字符元素。交换的方法是借助临时变量temp
来存储其中一个字符元素,然后进行交换。交换完成后,l
指针向前移动一位,r
指针向后移动一位,直到它们相遇,循环结束,此时字符串反转完成。
使用 C++ STL 的 reverse 函数
#include <iostream>
#include <algorithm> // 包含 reverse 函数
#include <cstring>
using namespace std;
int main() {
char arr[100] = "hello world";
int len = strlen(arr);
reverse(arr, arr + len); // 使用 reverse 函数反转字符串
cout << arr; // 输出 "dlrow olleh"
return 0;
}
reverse
函数接收两个迭代器(或指针),分别指向要反转的序列的起始和结束位置。这个案例里,我们传递了字符数组的首地址 arr
和末尾地址 arr + len
,reverse
函数会自动处理这两个地址之间的元素,将它们反转。