C语言count_alpha程序优化:如何仅打印字母的最终出现次数
解决C语言字母计数程序重复输出的问题
你的问题核心是遍历字符串时边统计边打印,导致同一个字母每次计数更新都输出一次。最简单的解决方法是先把所有字母的出现次数统计完,再一次性打印每个字母的最终结果。
修改后的完整代码
#include <unistd.h> #include <stdio.h> int str_len(char *str) { int i = 0; while(str[i]) i++; return(i); } void count_alpha(char *str) { int tab[26] = {0}; int i = 0; // 第一步:遍历字符串,完成所有字母的计数统计 while(str[i]) { if (str[i] >= 'a' && str[i] <= 'z') { // 简化计数逻辑,初始值为0,自增即可实现计数 tab[str[i] - 'a']++; } i++; } // 第二步:遍历计数数组,只打印有出现次数的字母 i = 0; while(i < 26) { if(tab[i] > 0) { printf("%d%c, ", tab[i], 'a' + i); } i++; } } int main() { char str[] = "aabccc"; count_alpha(str); return(0); }
关键改动说明
- 拆分流程:把「统计计数」和「打印结果」分成两个独立循环,先完成全部统计再统一打印,从根源上避免重复输出。
- 简化计数逻辑:原代码里的条件判断可以直接替换为自增操作,初始值为0时,第一次自增就是1,和原逻辑完全一致,代码更简洁。
- 按计数数组输出:通过遍历
tab[26]数组,找到计数大于0的位置,转换成对应字母('a' + i)后打印最终次数,确保每个字母只输出一次。
输出结果
运行修改后的代码,会输出:2a, 1b, 3c, (如果想去掉最后多余的逗号,可以额外加个判断——比如记录第一个输出的元素,之后的元素先打印逗号再打印内容,若对格式要求不严格,当前写法已满足核心需求)
内容的提问来源于stack exchange,提问作者MSU
相关产品推荐
相关产品推荐

