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

C++中使用指针递归转换字符数组大写字母为小写失败求助

问题分析与修复方案

咱们先看看你代码里的核心问题——递归终止条件写反了!

你当前的第一个判断:

if ( *input ) { 
    cout << input << endl; 
    return; 
}

这个逻辑是:只要当前字符不是空字符(也就是还没到字符串末尾),就直接return退出函数。这意味着程序刚进入all_lower,看到第一个字符'T'非空,就直接输出原字符串并终止了,后面的大写转小写代码根本没机会执行!这就是为什么输出还是原字符串的原因。

修复后的代码

#include <iostream>
#include <string>
// 引入cctype头文件,使用标准的tolower函数更稳妥
#include <cctype>

using namespace std;

void all_lower(char* input) {
    // 正确的终止条件:遇到字符串结束符'\0'才停止递归
    if (*input == '\0') {
        return;
    }
    // 判断是否为大写字母,进行转换
    if (*input >= 'A' && *input <= 'Z') {
        *input = tolower(*input);
        // 如果你偏好手动修改ASCII值,也可以写成 *input += 32;
    }
    // 输出当前处理后的字符
    cout << *input;
    // 递归处理下一个字符
    all_lower(input + 1);
}

int main() {
    char test[] = "Test";
    all_lower(test);
    cout << endl;
    // 额外输出整个转换后的字符串验证结果
    cout << "最终转换结果:" << test << endl;
    return 0;
}

关键修复点

  • 修正递归终止逻辑:只有当*input等于'\0'(字符串结束标记)时才终止递归,这样才能逐个遍历并处理每个字符。
  • 可选鲁棒性优化:用标准库的tolower()函数代替手动加32,这个函数会适配不同字符集的大小写转换规则,比硬编码ASCII偏移更通用。
  • 调整输出方式:原代码直接输出整个字符串的逻辑会打断递归流程,改成逐个输出字符或最后统一输出结果,更符合递归处理的预期。

运行修复后的代码,输入"Test"会输出"test",完全符合你想要的大写转小写效果。

内容的提问来源于stack exchange,提问作者Tanveer Salim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:09