逐个字符地将文本文件的内容读入矢量而不跳过空格或新行

时间:2016-09-20 20:07:01

标签: c++

所以我有几个文本文件。我需要弄清楚文件中最常见的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值计算字符。但是,它很好地计算了它们,但是空格和换行引起了问题。有没有更有效的方法呢?

1 个答案:

答案 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 ...
    }
}