C++ 如何标记现有文件的行?
假设我有一个包含如下内容的文本文件: 四 得分 及 七 年头 以前 我希望能够标记这些行,以便在程序运行后,文件看起来像: 1.四个 2.得分 3.及 4.7 五年半 6.5年前 我准备了一个解决方案;然而,我发现它很重,而且它有一个问题,即标记一个超过最后一行C++ 如何标记现有文件的行?,c++,file,io,C++,File,Io,假设我有一个包含如下内容的文本文件: 四 得分 及 七 年头 以前 我希望能够标记这些行,以便在程序运行后,文件看起来像: 1.四个 2.得分 3.及 4.7 五年半 6.5年前 我准备了一个解决方案;然而,我发现它很重,而且它有一个问题,即标记一个超过最后一行 std::string file = "set_test - Copy.txt"; std::ifstream in_test{file}; std::vector<std::string>
std::string file = "set_test - Copy.txt";
std::ifstream in_test{file};
std::vector<std::string> lines;
while(in_test) {
std::string temp;
getline(in_test, temp);
lines.push_back(temp);
}
in_test.close();
std::ofstream out_test{file};
for(unsigned int i = 0; i < lines.size(); ++i) {
out_test << i+1 << '.' << lines[i] << '\n';
}
std::string file=“set\u test-Copy.txt”;
std::ifstream in_test{file};
std::矢量线;
while(in_测试){
std::字符串温度;
getline(在线测试,温度);
管线。推回(温度);
}
in_test.close();
std::ofstream out_test{file};
for(无符号整数i=0;i out_test问题的原因是这种结构
while (stream is good)
read from stream
do something
因为它会读得太多。(有关说明,请参阅。)
发生的情况是,最后一个getline
,即实际到达文件末尾的那一个,将失败并将temp
保留为空。
然后,将该空行添加到行中
“规范”流读取循环结构是
while (attempt to read)
do something with the result
就你而言
std::string temp;
while (getline(in_test, temp)) {
lines.push_back(temp);
}
如果写入不同的文件,则不需要存储除最后一行以外的任何内容;您可以立即写入每一行。
如果您想更换原件,以后可以用新的替换旧的。
大概是这样的:
std::ifstream in_test{"set_test - Copy.txt";}
std::ofstream out_test{"set_test - Numbered.txt"};
if (!in_test || !out_test) {
std::cerr << "There was an error in the opening of the files.\n";
return;
}
int i = 1;
std::string line;
while (getline(in_test, line) && out_test << i << '.' << line << '\n') {
i++;
}
std::ifstream in_test{“set_test-Copy.txt”}
std::of stream out_test{“set_test-number.txt”};
如果(!in|u测试| |!out|u测试){
标准:cerr