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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:05