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

C++按指定原型递归反转字符串丢失最后一个字符问题求解

问题原因

  • 你当前的递归逻辑完全没有修改传入的letters引用:你递归时传入的是局部变量t的引用,所有递归操作都作用在临时字符串上,原入参不会有任何变化,不符合给定函数原型的设计要求。
  • 如果你的需求是在reverse函数内部直接打印反转结果,当前代码逻辑本身可以输出完整反转内容,出现丢字符的情况,基本是两个原因导致:
    1. 实际运行代码的递归终止条件被误写为letters.size() == 1,长度为1的字符串会直接返回,跳过了首字符打印
    2. 你在调用reverse函数后,额外打印了未被修改的原字符串,导致输出内容混淆

符合要求的正确实现

如果你需要reverse函数直接修改入参完成字符串反转,实现代码如下:

void reverse(string & letters){
    // 递归终止:长度小于等于1的字符串无需反转
    if (letters.size() <= 1) {
        return;
    }
    // 交换首尾字符
    swap(letters[0], letters[letters.size()-1]);
    // 提取中间待反转子串
    string mid_part = letters.substr(1, letters.size() - 2);
    // 递归反转中间子串
    reverse(mid_part);
    // 把反转后的中间子串替换回原字符串
    letters.replace(1, letters.size() - 2, mid_part);
}

如果你的需求是仅在reverse函数内部打印反转结果,不需要修改原字符串,保持原有逻辑即可,注意调用后不需要再额外打印原字符串:

void reverse(string & letters){
    if (letters.empty()){
        return;
    }
    string t = letters.substr(1);
    reverse(t);
    cout << letters[0]; 
}

内容的提问来源于stack exchange,提问作者Ian Rogers。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:24:03