0

我有一个包含多行的文本文件。我想将每一行存储在字符串向量中。我想从文件中读取直到到达最后一行。我使用了 EOF 函数,但它似乎也在最后一行之后存储了空行。这是我的代码片段。text_list 是一个向量,其中存储了文件的所有行。

void TextBuddy::storeDataFromFileInVector(string filename){
ifstream infile;
int numbers;
string textMessage;
infile.open(filename);

while (!infile.eof()){
    getline(infile, textMessage);
    text_list.push_back(textMessage);
}
infile.close();
}
4

2 回答 2

2

eof() 不展望未来。所以,当你在 EOF 之前,你也会将它读入你的向量并且可能会破坏它。

将所有行读入向量的更好方法是:

string line;
while(getline(inFile, line)
    text_list.push_back(line);

一旦您读取 EOF 或发生任何其他错误,您的循环就会中断。

另一种方法是使用迭代器和算法库:

copy(istream_iterator<string>(inFile), istream_iterator<string>(),
     back_inserter(text_list));

这取决于你喜欢哪一个。

于 2013-08-29T16:25:49.770 回答
0

空行,复数?在推送到列表之前,您应该检查它是否达到 EOF。

infile.open( filename );

getline( infile, textMessage );
while( !infile.eof() )
{
    text_list.push_back( textMessage );
    getline( infile, textMessage );
}

编辑:KasF 的答案更好。

于 2013-08-29T16:22:18.507 回答