提问人:Saku 提问时间:8/22/2022 更新时间:8/23/2022 访问量:133
在 C++ 中读取文本文件的最后一个空行
Read last empty line of a text file in C++
问:
我尝试
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<string> readLines(string filename)
{
ifstream infile(filename);
vector<string> v;
string line;
bool good;
do {
good = getline(infile, line).good();
if (!good) break; //<---- if exists, or not - is bad
v.push_back(line);
} while (good);
return v;
}
int main() {
auto v = readLines("test.txt");
for (auto &line:v)
cout << ">" << line << endl;
}
如果我断开循环,向量中没有最后一行,如果没有断开 - 添加空行,尽管不在文件中。 我想用测试文件进行精确测试,如果存在,最后一个空行很重要。
答:
0赞
Saku
8/23/2022
#1
解决方案很简单:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<string> readLines(string filename)
{
ifstream infile(filename);
vector<string> v;
string line;
bool readedNewline;
if (infile.peek() != EOF)
while(true) {
readedNewline = getline(infile, line).good();
v.push_back(line);
if (!readedNewline) break;
}
return v;
}
int main() {
auto v = readLines("test.txt");
for (auto &line:v)
cout << ">" << line << endl;
}
getline().good() 如果 after line 是换行符字符,则返回 true。 推送到向量最后不good(),因此我必须检查文件是否不为空(peek())
评论
while (getline(infile, line) && !line.empty()) { v.push_back(line); }
??