gpt4 book ai didi

c++ - 读取多个文本文件并计算一个单词的出现次数?

转载 作者:行者123 更新时间:2023-11-27 23:14:56 33 4
gpt4 key购买 nike

我应该从包含多个(21578)个文本文件的文件夹中读取(扫描)数据,文件名从 1 到 21578 编号,并读取文本文件中出现的每个单词,并计算次数它出现在整个文件夹中,即;在所有文件中我该怎么做?请帮忙。

    #include <iostream>
#include <fstream>
#include <string>
using namespace std;

void main ()
{
string STRING;
ifstream infile;
for(int i=0;i<21578;i++)
{


infile.open (i+".txt");
while(!infile.eof) // To get you all the lines.
{
getline(infile,STRING); // Saves the line in STRING.
cout<<STRING; // Prints our STRING.
}
infile.close();
system ("pause");
}
}

最佳答案

最简单的方法是创建一个字符串到整数的映射。

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

然后递增包含的 int,如果它不存在则添加到映射。

http://www.cplusplus.com/reference/map/map/

如果您使用的是 c++11(我认为)或更高版本,您甚至可以使用 unordered_map,它使用哈希而不是使用排序来访问元素。如果性能很重要,这是您可以研究的优化。

这里有一些示例代码可以帮助您入门

#include <iostream>
#include <map>
#include <string>
using namespace std;

void incrementString(map<string, int> &theMap, string &theString) {
if(theMap.count(theString)) {
theMap[theString]++;
} else {
theMap[theString] = 1;//This fixes the issue the other poster mentioned, though on most systems is not necessary, and this function would not need an if/else block at all.
}
}

void printMap(map<string, int> &theMap) {
map<string, int>::iterator it = theMap.begin();

do {
cout << it->first << ": " << it->second << endl;
} while(++it != theMap.end());

}

int main() {
map<string, int> stringMap;

string hi = "hi";//Assigning "hi" to a string, like like cin>>string would.
string the = "the";

incrementString(stringMap, hi);//Adding one occurance of hi to the map

incrementString(stringMap, the);//Adding one occurance of the to the map

incrementString(stringMap, hi);//Adding another occurance of hi to the map

printMap(stringMap); //Printing the map so far
}

int main_alt() {
map<string, int> stringMap;

string someString;

while(cin>>someString) {//reads string from std::cin, I recommend using this instead of getline()
incrementString(stringMap, someString);
}

printMap(stringMap);
}

因此预期的输出是:

hi: 2
the: 1

此外,如果您启用“main_alt()”,您可以像这样调用您的程序并查看 while(cin>>string) 行是如何工作的。

./program < someFile.txt

关于c++ - 读取多个文本文件并计算一个单词的出现次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985535/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com