C++ 字计数器

标签 c++ string parsing dictionary multimap

很难开始一个 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 存储数据。它不解析数据。您将需要:

  1. 从文件中读取单词。这可以一个接一个地完成,或者您可以一次一行地读取文件并标记该行。我的建议是一次读一个单词。

  2. 想出存储数据的数据结构。我的建议:

    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/

相关文章:

c++ - 在 C++ 中查找序列的最小值/最大值/平均值

javascript - 为什么我的字符串返回 "&#39;"

java - 将字符串中的单词拆分为数组,但如果它们位于斜杠之间则不拆分

c++ - COM 对象 DLL 加载问题

c++ - 获取在 C/C++ 中调用的最后一个函数

python - 使用具有不同值的多个相同字符串解析 Python JSON

python - BeautifulSoup - 如何在不打开标签和 <br> 标签之前提取文本?

php - 如何使用简单的 html dom 解析器从 scrape 中抓取特定数据

c++ - 在终端中更智能地查看程序输出 - 显示/隐藏较低优先级输出的按钮,允许向下钻取程序输出

string - 将带引号的字符串参数传递给 bash 脚本