我正在尝试从文件中读取文本,并在此过程中跟踪文本的内容。如果之前未见过的单词被插入到地图中并初始化为1.如果已经看到(存在于地图中),那么该值就会递增。
如果我删除调用[]
操作符的操作,那么文件的读取工作正常。为了确认读取文件成功,我将第一个文件的内容输出到输出文件中。
因此,向地图添加键/值时会出现问题。似乎我的代码在第二次进入while循环时会出现段错误。
这是一个简单的类,它充当单词计数器,以及一个处理文件打开,创建对象和读取文件的主方法。
#include <map>
#include <string>
#include <fstream>
using namespace std;
class WordCounter
{
public:
map<string, int> words;
WordCounter operator[] (const std::string &s)
{
++words[s];
// If we put a breakpoint here in GDB, then we can print out the value of words with GDB.
// We will see that we sucessfully entered the first string.
// But, the next time we enter the while loop we crash.
}
}
};
int main()
{
WordCounter wc;
ifstream inFile;
ofstream outFile;
string word;
inFile.open("input.txt");
outFile.open("output.txt");
while(inFile>>word)
{
outFile << word << " ";
wc[word]; // This line seems to cause a segfault
}
inFile.close();
outFile.close();
}
就目前而言,您的代码有许多错误,无法编译。修复这些并添加成员函数以查看单词counter收集的统计信息后,我得到的结果与我预期的一样(并且没有段错误或类似的东西)。
#include <map>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
class WordCounter
{
public:
map<string, int> words;
void operator[] (const std::string &s)
{
++words[s];
}
void show() {
for (auto const& p : words) {
std::cout << p.first << " : " << p.second << "\n";
}
}
};
int main()
{
WordCounter wc;
ifstream inFile("input.txt");
string word;
while(inFile>>word)
{
wc[word];
}
wc.show();
}