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

C语言重复字符打印程序优化:避免重复输出同一字符

解决C语言程序中重复字符重复输出的问题

嘿,我明白你遇到的困扰了——你的程序能正确统计重复字符的出现次数,但同一个字符会被反复输出好几次,对吧?其实有个超简单的办法就能搞定,核心思路就是标记已经处理过的字符,避免重复统计输出。

具体方案:用标记数组记录已处理字符

因为ASCII字符的范围是0-255,我们可以直接创建一个大小为256的数组,用来标记某个字符是否已经被统计输出过。初始时数组所有元素设为0(表示未处理),当我们处理完一个字符的统计并输出后,就把对应位置设为1(表示已处理),后续再遇到这个字符就直接跳过。

修改后的完整代码

#include <stdio.h>
#include <string.h>

int main() {
    char word[100];
    printf("请输入一个单词:");
    scanf("%s", word);
    int word_len = strlen(word);
    
    // 初始化标记数组,0表示未处理,1表示已处理
    int processed_chars[256] = {0};

    for (int i = 0; i < word_len; i++) {
        char current_char = word[i];
        // 如果该字符已经处理过,直接跳过当前循环
        if (processed_chars[(unsigned char)current_char]) {
            continue;
        }

        // 统计当前字符的出现次数
        int count = 0;
        for (int j = 0; j < word_len; j++) {
            if (word[j] == current_char) {
                count++;
            }
        }

        // 只有出现次数大于1时才输出(如果需要输出所有字符可以去掉这个判断)
        if (count > 1) {
            printf("字符 '%c' 出现了 %d 次\n", current_char, count);
        }

        // 标记该字符为已处理,避免后续重复输出
        processed_chars[(unsigned char)current_char] = 1;
    }

    return 0;
}

为什么这个方法有效?

  • 每个字符只会被统计并输出一次,不管它在字符串里出现多少次。
  • 用(unsigned char)强制转换是为了避免字符值为负数的情况(比如扩展ASCII字符),确保数组索引合法。
  • 这个方案实现简单,不需要复杂的数据结构,性能也足够应付普通长度的单词。

如果你之前尝试用数组存储已输出字符没成功,大概率是没处理好标记的逻辑——这个直接用字符的ASCII值作为索引的方式,比手动维护一个存储已输出字符的数组要更直观、不容易出错哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:41:43