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

isupper()函数无法识别A-F、Z等大写字母的原因求助

问题根源:错误将isupper()返回值与true直接比较

核心问题

ctype.h库中的isupper()、isalpha()、isdigit()这类字符判断函数,返回值并非标准布尔值true/false:

  • 满足条件时,返回任意非零整数(具体值由编译器实现决定,不一定是1)
  • 不满足条件时,返回0

你代码中用isupper(c) == true做判断,而C里true通常被定义为1,当isupper()返回的非零值不是1时,比较结果为假,导致A、B、C等大写字母无法进入预期分支。


修复方案

1. 修正rotate函数的判断逻辑

直接利用非零值为真的特性,删除硬编码的字符判断,同时用字符常量替代ASCII码提升可读性:

char rotate(char c, int key)
{
    // Prepare for wrapping around
    key = key % 26;

    // Check for alphabetical letter
    if (!isalpha(c))
    {
        return c;
    }

    else if (isupper(c))
    {
        return (char) (((int) c - 'A' + key) % 26 + 'A');
    }
    else
    {
        return (char) (((int) c - 'a' + key) % 26 + 'a');
    }
}

2. 优化only_digits函数的判断逻辑

同样修正isdigit()的判断方式,同时优化遍历逻辑(发现非数字直接返回,无需遍历全部):

bool only_digits(string s)
{
    for (int i = 0; i < strlen(s); i++)
    {
        if (!isdigit(s[i]))
        {
            return false;
        }
    }
    return true;
}

内容的提问来源于stack exchange,提问作者kevin-sekol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:47:03