我怎样才能跟踪单词出现在文本文件中的次数?我想为每一个字都这样做.
例如,如果输入类似于:
"那个男人对男孩说."
每个"男人对男孩说嗨"都会出现1.
"该"将出现2.
我正在考虑保留一个包含单词/出现对的字典,但我不确定如何在C中实现这一点.使用解决方案链接任何类似或相关的问题都会很棒.
编辑:为了避免推出我自己的哈希表,我决定学习如何使用glib.在此过程中,我找到了一个很好的教程,可以解决类似的问题.http://bo.majewski.name/bluear/gnu/GLib/ch03s03.html
我对不同方法的数量感到震惊,特别是Ruby实现的简单性和优雅性.
是的,具有单词出现对的字典可以很好地工作,实现这种字典的通常方法是使用哈希表(或有时使用二叉搜索树)。
您也可以使用trie(或其压缩版本,“ Patricia trie” / Radix trie),其复杂度对于此问题渐近最佳,尽管我怀疑在实践中它可能比(好的)哈希表实现慢。
[我真的认为散列表或散列表是否更好取决于输入中单词的分布-例如,散列表需要将每个单词存储在其散列存储区中(以防止冲突),而如果您有很多带有通用前缀的单词,在特里里那些通用前缀是共享的,每个只需要存储一次,但是所有指针仍然有开销……如果您碰巧尝试两者,我很好奇他们比较。]
只是为了好奇,这里是一个简单的Ruby计算单词问题解决方案.它应该与C中的算法基本相同,只需要更多的代码.
h = Hash.new(0) File.read("filename.txt").split.each do |w| h[w] += 1 end p h