如何修改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
相关产品推荐
相关产品推荐

