如何在C++中使用交换函数与指针原地反转字符串数组?
Hey,看你在做原地反转字符串数组的作业,刚好我给你整理了完全符合要求的实现方案,还附上了关键细节的说明!
原地反转字符串数组的完整实现
你的核心需求我都get到了:
- 必须原地反转字符串数组,不能额外开辟新数组
- 要用接收两个字符指针的
swap函数,通过操作内存地址交换单个字符 swap函数要在循环中执行
可运行的完整代码
#include <iostream> using namespace std; // 接收两个字符指针的交换函数,直接操作内存地址完成字符交换 void swap(char *a, char *b){ char temp = *a; *a = *b; *b = temp; } int main() { // 注意:要加上字符串结束符'\0',避免输出时出现乱码 char array[6] = {'H','e','l','l','o','\0'}; int str_len = 0; // 计算字符串的实际长度(也可以直接用sizeof(array)/sizeof(array[0])-1,这里用通用方法) while(array[str_len] != '\0'){ str_len++; } // 双指针循环:从首尾向中间交换字符,只需要遍历一半元素 for(int i = 0; i < str_len / 2; i++){ // 传递对应位置的字符地址给swap函数 swap(&array[i], &array[str_len - 1 - i]); } // 输出反转后的结果 cout << "反转后的字符串:" << array << endl; return 0; }
关键细节解释
- swap函数的设计:通过字符指针接收两个字符的内存地址,解引用后直接修改对应地址里的字符值,完全符合你要求的“操作内存地址”的要求,而且是真正的原地交换。
- 循环逻辑:采用双指针思路,从数组的首尾开始交换,每次循环向中间移动一位,直到指针在中间相遇(
i < str_len/2),这样只需要遍历一半的元素,效率拉满。 - 字符串结束符的补充:你原来的代码里没有加
'\0',直接用cout输出字符串会出现乱码,所以我调整了数组长度并加上结束符,确保输出正常。
运行结果
编译运行后会输出:
反转后的字符串:olleH
内容的提问来源于stack exchange,提问作者macdaddy
相关产品推荐
相关产品推荐

