You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:49:59