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

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);
}

关键改动说明

  1. 拆分流程:把「统计计数」和「打印结果」分成两个独立循环,先完成全部统计再统一打印,从根源上避免重复输出。
  2. 简化计数逻辑:原代码里的条件判断可以直接替换为自增操作,初始值为0时,第一次自增就是1,和原逻辑完全一致,代码更简洁。
  3. 按计数数组输出:通过遍历tab[26]数组,找到计数大于0的位置,转换成对应字母('a' + i)后打印最终次数,确保每个字母只输出一次。

输出结果

运行修改后的代码,会输出:2a, 1b, 3c, (如果想去掉最后多余的逗号,可以额外加个判断——比如记录第一个输出的元素,之后的元素先打印逗号再打印内容,若对格式要求不严格,当前写法已满足核心需求)

内容的提问来源于stack exchange,提问作者MSU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:15:31