如何优化C语言输入字符/数字的识别逻辑及处理大数值输入
代码优化方案
核心优化思路
- 将重复的输入值转换逻辑抽为独立工具函数,消除冗余代码,后续修改规则只需要调整一处即可
- 替换硬编码的ASCII数值判断,改用
ctype.h标准库提供的字符类型判断接口,可读性更强,也避免ASCII不兼容的极端场景问题 - 通用数字解析逻辑替换固定长度字符判断,支持任意大小的合法数字输入,不再局限于10以内的数值
- 补充多行输入处理逻辑,可直接跑完示例给出的所有输入用例
优化后完整代码
#include <stdio.h> #include <ctype.h> #include <stdlib.h> // 输入值转换:数字转对应整数,大写字母转字母表排序(A=1...Z=26) int convert(char *input) { if (isdigit(input[0])) { // 是数字直接转整数,支持任意大小的合法数字输入 return atoi(input); } else if (isupper(input[0])) { // 是大写字母,返回对应排序值 return input[0] - 'A' + 1; } // 非法输入可根据需求补充异常处理逻辑 return 0; } int main() { char a[32], b[32]; // 循环读取每一行的两个输入,直到输入结束 while (scanf("%s %s", a, b) == 2) { printf("%d\n", convert(a) + convert(b)); } return 0; }
逻辑说明
- 转换函数会优先判断输入首字符是不是数字,如果是直接用
atoi完成整数转换,不管是1位、2位还是更多位的数字都能正确解析,天然支持更大的数值输入 - 字母判断用标准库
isupper接口,计算逻辑用'A'代替硬编码的65,代码含义一目了然 - 新增的循环读取逻辑可以处理任意行数的输入,完全匹配示例的输入输出要求,不需要每次运行只处理一行
内容的提问来源于stack exchange,提问作者Becker
相关产品推荐
相关产品推荐

