C++;文字计数器 很难开始一个C++类的项目。我将阅读一个文本文件,计算每行中每个单词出现的次数。输出将报告找到的每个单词,然后列出找到该单词的行以及该行出现的次数(如下所示)

C++;文字计数器 很难开始一个C++类的项目。我将阅读一个文本文件,计算每行中每个单词出现的次数。输出将报告找到的每个单词,然后列出找到该单词的行以及该行出现的次数(如下所示),c++,string,parsing,map,multimap,C++,String,Parsing,Map,Multimap,所以对于一个单词“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,

所以对于一个单词“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
.
.
.
我正在考虑使用地图作为数据结构。然后,在读取/解析完每一行之后,我会将这些值移动到一个更大的多重映射中,该映射跟踪整个文本文件,关键字是单词,值是格式为#::的字符串


在我深入思考这一问题之前,这样做有意义吗?或者你能推荐一种我缺少的更好的方法吗?

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

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

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

    std::map

    显然,地图上的关键是单词。 std::pair保存行号和该单词在该行中出现的次数。
    std::vector
    允许您捕获那些
    std::pair
    s的列表


  • 希望这有助于您继续前进。

    甚至可能是
    map
    map
    ,那么更新语法就是
    ++my_map[word][line]