如何在文件处理中忽略换行符

How to ignore line breaks in file handling

本文关键字:换行符 处理 文件      更新时间:2023-10-16

>有没有办法在读取文本文件时跳过换行符?

例如,假设我有两个文本文件,input.textoutput.text

我的input.text文件如下所示:

欢迎来到 StackOverflow<换行符>另一句话...

我从input.text中阅读了第一行,并将该行的一部分写到output.text.

但是当我阅读换行符后的第二行时,我的第一行在文本文件中丢失了。

我该怎么办?

要读取文件,我使用以下代码:

ifstream input.open("input.text");
while(input)
{
    getline(input,string);
}

并写

ofstream output;
output<<string;`

您的问题与 Enter 键无关,而与您如何从文件中读取/写入有关。您的代码显然如下所示:

#include <iostream>
#include <fstream>
#include <string>
int main() {
     std::string string;
     std::ifstream input("input.text");
     while (input) { // bad
         std::getline(input, string);
     }
     std::ofstream output("output.text");
     output << string;
}

"while"循环覆盖每行的string。如果您有 3 行文本,则在 while 循环结束时,string将仅包含输入文件的最后一行。

您可能想做的更像是:

#include <iostream>
#include <fstream>
#include <string>
int main() {
     std::string string;
     std::ifstream input("input.text");
     std::ofstream output("output.text");
     while (std::getline(input, string)) {
         output << string;
     }
}

以下是使用 cin 和 cout 的更简单版本:

#include <iostream>
#include <fstream>
#include <string>
int main() {
     std::string string;
     while (std::getline(std::cin, string)) {
         std::cout << string;
     }
}

如前所述,每行末尾的""丢失:http://ideone.com/0FhEyj 您可以通过将输出行更改为

          std::cout << string << "n";