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
相关产品推荐
相关产品推荐

