所以我有几个文本文件。我需要弄清楚文件中最常见的10个字符和单词。我决定使用一个向量,并将其与文件中的每个字符一起加载。但是,它需要包含空格和新行。
这是我目前的职能
void readText(ifstream& in1, vector<char> & list, int & spaces, int & words)
{
//Fills the list vector with each individual character from the text ifle
in1.open("test1");
in1.seekg(0, ios::beg);
std::streampos fileSize = in1.tellg();
list.resize(fileSize);
string temp;
char ch;
while (in1.get(ch))
{
//calculates words
switch(ch)
{
case ' ':
spaces++;
words++;
break;
default:
break;
}
list.push_back(ch);
}
in1.close();
}
但由于某种原因,它似乎并没有正确地保存所有角色。我在程序的其他地方有另一个向量,它有256个int都设置为0.它通过带有文本的向量,并在另一个向量中用0-256 int值计算字符。但是,它很好地计算了它们,但是空格和换行引起了问题。有没有更有效的方法呢?
答案 0 :(得分:4)
您的代码现在的问题是您正在调用
list.resize(fileSize);
并使用
list.push_back(ch);
同时在你的阅读循环中。你只需要一个或另一个。
忽略其中一个。
有更有效的方法吗?
最简单的方法是使用您已知的大小调整std::vector <char>
的大小,并使用std::ifstream::read()
一次性读取整个文件。之后从矢量内容计算其他所有内容
这些方面的东西:
list.resize(fileSize);
in1.read(&list[0],fileSize);
for(auto ch : list) {
switch(ch) {
// Process the characters ...
}
}