无法将迭代器转为int存入map,求统计错拼单词的解决方案
解决错拼单词统计的问题
先明确两个核心问题:
- 逻辑判断写反了:你要统计的是不在字典里的错拼单词,所以if条件应该是
dict.find(str) == dict.end(),而非!= - 计数方式完全错误:
dict.find(str)返回的是字典的迭代器,和单词出现次数毫无关系,你需要的是对每个错拼单词累加出现次数
修正后的代码
map<string, int> misspelled; // 遍历文本文件的每一行 while (getline(random, str)) { // 用正则匹配每行中的单词 while (regex_search(str, matches, rules)) { // 先提取当前匹配到的单词(你原来的代码直接覆盖str,会丢失目标单词) string word = matches[0].str(); str = matches.suffix().str(); // 更新str为匹配后的剩余文本 // 判断单词是否为错拼(不在字典中) if (dict.find(word) == dict.end()) { // 直接用map的[]操作符计数:不存在则默认初始化为0,加1后变成1;存在则直接累加次数 misspelled[word]++; } } } // 打印统计结果 for (const auto& item : misspelled) { cout << item.first << ": " << item.second << "次" << endl; }
关键说明
- 提取匹配单词:你原来的代码直接把str赋值为后缀字符串,导致丢失了当前匹配到的目标单词,必须先通过
matches[0].str()拿到单词再更新str - 计数逻辑:
map<string, int>的[]操作符是最简洁的计数方式,无需手动调用insert,它会自动处理键不存在的情况 - 原错误根源:你错误地将字典迭代器当成次数值传入pair,迭代器是用来遍历容器的工具,和次数统计没有任何关联
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

