如何修正仅全大写字符串生效的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
相关产品推荐
相关产品推荐

