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

如何修改C语言代码实现A-Z映射为1-26?现有代码无法处理J-Z多位数转换

问题根因

你现有代码的问题在于只给每个字母分配了1位字符的存储空间,但JZ对应的编码是1026,均为2位数字,原来的单字符赋值逻辑无法处理两位数的场景,同时计算逻辑直接加'0'只会得到单个ASCII字符,无法拆分出十位和个位数字。

修改后完整代码

#include <stdio.h>

void changeToDigitEncode(char s[], char e[]) {
    int i;
    int eIndex = 0;
    for (i = 0; s[i] != '\0'; i++) {
        // 计算当前字母对应1~26的原始数值
        int num = s[i] - 'A' + 1;
        if (num >= 10) {
            // 两位数先写入十位
            e[eIndex] = num / 10 + '0';
            eIndex++;
        }
        // 写入个位
        e[eIndex] = num % 10 + '0';
        eIndex++;
    }
    e[eIndex] = '\0';
}

int main(void) {
    char sentence[20], encoded[40];
    // 限制输入长度避免缓冲区溢出
    scanf("%19s", sentence);
    changeToDigitEncode(sentence, encoded);
    printf("%s\n", encoded);
    return 0;
}

核心修改说明

  • 新增中间变量num计算每个字母对应的原始数值1~26,避免重复计算
  • 对大于等于10的数值先拆分十位写入编码数组,再写入个位,一位数直接写入个位即可
  • 给scanf增加输入长度限制,避免输入超过19个字符时缓冲区溢出
  • 补充main函数的返回值符合C语言标准规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:51:02