C语言统计字符串指定字符出现次数的代码修正问询
代码问题排查与修正
你的代码存在三处核心问题,按如下方式修改即可正常运行:
- 未读取用户输入:声明
userChar和userString后没有编写输入接收逻辑,两个变量存储的是内存中的随机脏数据,后续所有计算都基于无效值,结果自然不对。 - 循环条件写错:C语言没有原生字符串类型,字符数组存储的字符串以
\0作为结束标记,你写的i < userChar是把目标字符的ASCII编码值当成了循环长度,比如小写n的ASCII值是110,循环会执行110次,远超你定义的50长度数组边界,属于非法内存访问,输出结果完全随机。 - 输出格式不符合要求:现有逻辑只打印了计数和
's,没有输出输入的目标字符,也没有按规则拼接格式。
修正后可直接运行的代码
#include <stdio.h> int main(void) { char userChar; char userString[50]; int count = 0; // 读取输入:%c前的空格用于跳过缓冲区残留的换行、空格等空白字符 scanf(" %c %49s", &userChar, userString); // 遍历到字符串结束符\0为止,统计匹配字符的次数 for (int i = 0; userString[i] != '\0'; i++) { if (userString[i] == userChar) { count++; } } // 按要求输出结果 printf("%d %c", count, userChar); if (count != 1) { printf("'s"); } return 0; }
注:scanf里%49s是限制最多读49个字符,给字符串末尾的\0留位置,避免数组越界;这里不需要引入string.h头文件,因为不需要调用strlen函数,靠结束符判断遍历终点更直接。
效果验证
- 输入
n Monday时,程序统计到字符n出现1次,输出1 n,和预期一致 - 输入
s mississippi时,程序统计到字符s出现4次,输出4 s's,符合复数格式要求
内容的提问来源于stack exchange,提问作者user17918412
相关产品推荐
相关产品推荐

