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

如何修正仅全大写字符串生效的UppercaseToLowercase转小写函数?

问题分析与函数修正

原函数存在两个关键问题导致异常:

  • 条件判断逻辑错误:C语言不支持65 <= arr[i] <= 90这种连续比较写法。该表达式会先计算65 <= arr[i],得到0(假)或1(真)的布尔值,再将这个值和90比较,结果永远为真,因此所有字符都会被执行arr[i] +=32操作。
  • 循环边界不合理:依赖传入的size参数判断循环结束,不如直接判断字符串结束符'\0'更可靠,还能避免size传入错误的问题。

修正后的函数代码

#include <ctype.h> // 引入标准库头文件,使用字符处理函数

void UppercaseToLowercase(char arr[])
{
    for (int i = 0; arr[i] != '\0'; i++)
    {
        // 用标准库函数判断大写字母,可读性与可移植性更强
        if (isupper((unsigned char)arr[i]))
        {
            arr[i] = tolower((unsigned char)arr[i]);
        }
    }
}

无标准库依赖的替代方案

如果不想依赖<ctype.h>,可以手动修正条件判断逻辑:

void UppercaseToLowercase(char arr[])
{
    for (int i = 0; arr[i] != '\0'; i++)
    {
        // 用字符常量替代硬编码ASCII值,可读性更好
        if (arr[i] >= 'A' && arr[i] <= 'Z')
        {
            arr[i] += 32;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:56:01