很难开始一个 C++ 类的项目。我将阅读一个文本文件并计算每行中每个单词的出现次数。输出将报告找到的每个单词,后跟找到它的行列表和该行出现的次数(如下所示)。
所以对于单个单词“open”,如果它只在第三行出现两次,它会打印出:
open : 3:2
整体输出如下所示:
A : 48:1
a : 9:1, 10:1, 12:2, 14:1, 17:2, 19:1, 26:1, 27:1, 28:2,
: 39:1, 41:1, 43:1, 45:2, 46:2, 49:1, 50:2, 51:1, 56:3,
: 81:1, 82:1, 94:1, 111:1, 112:1, 114:1, 117:1, 132:1, 135:1,
: 138:1, 142:2, 143:1, 144:1, 152:1, 156:1, 161:2, 163:1, 164:1,
: 167:1, 169:1, 175:1, 182:2, 190:1, 192:1
about : 16:1, 29:1, 166:1, 190:1, 191:1
above : 137:1
accompanied : 6:1
across : 26:1
.
.
.
我正在考虑使用 map 作为数据结构。然后,在读取/解析每一行后,我会将这些值移动到一个更大的多映射中,该多映射跟踪整个文本文件,键是单词,值是格式为 #:# 的字符串。
在我走得太远之前,这样做是否有意义,或者您能推荐一种我所缺少的更好的方法吗?
最佳答案
你在 map 上好像看不清楚。 map 存储数据。它不解析数据。您将需要:
从文件中读取单词。这可以一个接一个地完成,或者您可以一次一行地读取文件并标记该行。我的建议是一次读一个单词。
想出存储数据的数据结构。我的建议:
std::map<std::string, std::vector<std::pair<int, int>>>
map 中的关键显然是单词。
std::pair<int, int>
保存行号和该行中该词的出现次数。std::vector<std::pair<int, int>>
允许您捕获那些std::pair
的列表
希望这能帮助您继续前进。
关于C++ 字计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22876826/