C语言编写大写转小写并统计转换数量独立函数问题排查
C语言大小写转换+大写字符计数代码错误修正
现有代码核心错误
- 参数类型不匹配:
umwandlung函数当前接收的是单个char类型字符,函数内部却使用text[n]的数组下标方式访问,直接导致编译失败 - 统计逻辑完全错位:统计大写字符数量的循环放在了处理单个字符的函数内,每处理一个字符都会执行无效统计,且统计变量为函数内局部变量,每次调用都会重置,无法累计全局转换数量
- 不安全函数使用:使用已被C标准废弃的
gets()函数,存在缓冲区溢出风险 - 遍历逻辑冗余:
main函数已经实现了字符串遍历,转换函数内不需要重复遍历字符串
修正后可运行代码
以下方案保留了你原有拆分处理的逻辑,仅调整参数和统计逻辑,改动最小:
#include <stdio.h> #include <string.h> // 单个字符转换,通过指针传递累计转换数量 char umwandlung(char text, int *upper_count) { // 用字符常量代替ASCII硬编码,可读性更好 if (text >= 'A' && text <= 'Z') { text = text + 32; (*upper_count)++; // 转换成功时计数+1 } return text; } int main(void) { char satz[80]; int i, x, upper = 0; printf("\n大写转小写 \n"); printf("请输入最长80字符的句子:\n"); // 替换gets为fgets避免缓冲区溢出 fgets(satz, 80, stdin); // 去掉fgets读取到的末尾换行符 satz[strcspn(satz, "\n")] = '\0'; x = strlen(satz); for (i = 0; i < x; i++) { satz[i] = umwandlung(satz[i], &upper); } printf("\n转换后的字符串:%s\n", satz); printf("共有%d个大写字母被转换\n", upper); return 0; }
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

