C ++字计数器

时间:2014-04-05 05:06:11

标签: c++ string parsing map 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
.
.
.

我正在考虑使用地图作为数据结构。然后,在读取/解析每一行完成之后,我会将这些值移动到一个更大的多图表中,该图表跟踪整个文本文件,其中键为单词,值为字符串,格式为#:#。

在我开始思考这条思路之前,这样做是否有意义,或者你能推荐一种我错过的更好的方法吗?

1 个答案:

答案 0 :(得分:2)

你似乎在地图上不清楚。地图存储数据。它不解析数据。你需要:

  1. 读取文件中的文字。这可以逐个完成,也可以一次读取一行文件并标记该行。我的建议是每次阅读一个单词。

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

    std::map<std::string, std::vector<std::pair<int, int>>>

    地图中的关键显然是这个词。 std::pair<int, int>包含行号以及该行中该单词的出现次数。 std::vector<std::pair<int, int>>允许您捕获std::pair的列表。

  3. 希望这可以帮助你前进。