C语言:如何统计文件中各单词出现次数并去除重复条目
解决单词统计重复条目问题
嘿,我懂你现在的烦躁——明明已经算出了每个单词的次数,结果输出的时候重复条目扎堆,比如C : 2和they : 2反复出现,看着特别乱对吧?别慌,咱从根源上解决这个问题:
问题根源
你大概率是把每次统计到的单词条目都存进了一个列表(或者类似的线性结构)里,而没有用键唯一的字典来存储单词和对应的计数。字典的特性就是键不能重复,刚好完美匹配“每个单词只保留一条带计数的条目”的需求。
修正方案(以Python为例,大学作业常用)
1. 用字典重新实现统计逻辑
这是最直接的解决方式,从统计环节就避免重复:
# 初始化空字典,键=单词,值=出现次数 word_counts = {} # 读取文件(替换成你的文件名) with open("your_assignment_file.txt", "r", encoding="utf-8") as file: # 读取所有文本并分割成单词(这里可以根据需求处理大小写、标点) words = file.read().split() # 遍历每个单词统计次数 for word in words: # 可选:统一大小写(比如把C和c当成同一个单词,不需要就删掉这行) # word = word.lower() # 可选:去除单词首尾的标点(比如逗号、句号) # word = word.strip(",.!?;:'\"") # 更新字典计数 if word in word_counts: word_counts[word] += 1 else: word_counts[word] = 1 # 输出结果到控制台,每个单词只打印一次 print("单词统计结果:") for word, count in word_counts.items(): print(f"{word} : {count}") # 可选:输出到新文件 with open("count_result.txt", "w", encoding="utf-8") as output_file: for word, count in word_counts.items(): output_file.write(f"{word} : {count}\n")
2. 如果已经有了重复的统计结果,事后去重
要是你不想改之前的统计代码,只想处理已有的重复输出数据,可以把重复的条目转成字典再输出:
# 假设你已经有了一个重复的条目列表,比如: duplicate_entries = ["C : 2", "they : 2", "are : 1", "not : 1", "they : 2", "written : 1", "in : 1", "C : 2"] # 转成字典去重 unique_counts = {} for entry in duplicate_entries: # 分割单词和计数 word, count = entry.split(" : ") unique_counts[word] = int(count) # 后面的条目会覆盖前面的,但计数是对的(因为你已经统计好次数了) # 输出去重后的结果 for word, count in unique_counts.items(): print(f"{word} : {count}")
额外小贴士
- 记得处理大小写和标点:比如
C和c、they和they,会不会被当成不同单词?根据作业要求调整上面代码里的注释部分。 - 字典的遍历顺序:Python 3.7+的字典会保留插入顺序,如果你需要按字母排序输出,可以用
sorted(word_counts.items())来遍历。
内容的提问来源于stack exchange,提问作者Toby Cook




