#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <map>
using namespace std;
int main()
{
ifstream fin;
fin.open("myTextFile.txt");
if ( fin.fail()){
cout << "Could not open input file.";
exit(1);
}
string next;
map <string, int> words;
while (fin >> next){
words[next]++;
}
cout << "\n\n" << "Number of words: " << words[next] << endl;
fin.close();
fin.open("myTextFile.txt");
while (fin >> next){
cout << next << ": " << words[next] << endl;
}
fin.close();
return 0;
}
我的主要问题是,当一个词出现不止一次时,它也被列出了不止一次。即,如果文本以“hello hello”开头,则 cout 会生成: “你好:2” '\n' “你好:2”
此外,我希望不必关闭文件,然后第二次重新打开文件,这是真的。它似乎仍然在最后一个 while 循环的文件末尾。
最佳答案
您需要遍历 map ,而不是再次打开文件。
查看提供的代码示例 here .
编辑:这里是一个遍历 map 的代码示例
// map::begin/end
#include <iostream>
#include <map>
int main ()
{
std::map<char,int> mymap;
std::map<char,int>::iterator it;
mymap['b'] = 100;
mymap['a'] = 200;
mymap['c'] = 300;
// show content:
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';
return 0;
}
这是输出:
a => 200
b => 100
c => 300
关于c++ - 使用 map 计算每个单词在文件中出现的次数。 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15480357/