从文件c ++中读取并在需要时写入新行字符

时间:2017-05-30 12:44:57

标签: c++ string readfile ifstream

文件内容(test_file.txt):

Line1\n 1\n 2\n 3\n 4\n
Line2\n 5\n 6\n 7\n 8\n
Line3\n 9\n 10\n 11\n 12\n
Line4\n bla\n bla\n bla\n bla\n
Line5\n etc\n etc\n etc\n etc\n

我从文本文件中读取特定行的代码:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
    ifstream f("test_file.txt");
    string s;

    for (int i = 1; i <= 3; i++)
        getline(f, s);

    cout << s;
    return 0;
}

使用此代码时得到的输出:

Line3\n 9\n 10\n 11\n 12\n

通缉输出:

Line3
9
10
11
12

我想从文本文件中读取一个特定的行并输出它,如上所示。如果在cpp文件中有这样的字符串,我也测试了tahat:

string s;
s = "Line3\n 9\n 10\n 11\n 12\n";
cout << s;

我得到了想要的输出。

请帮忙。

1 个答案:

答案 0 :(得分:2)

当您阅读第三行时,它实际上将包含'\ n'序列。您需要使用换行符替换它们。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

std::string& fix_newlines(std::string& s)
{
    size_t start_pos = 0;
    while((start_pos = s.find("\\n", start_pos)) != std::string::npos) {
         s.replace(start_pos, 2, "\n");
         start_pos += 1;
    }
    return s;
}

int main()
{
    ifstream f("test_file.txt");
    string s;

    for (int i = 1; i <= 3; i++)
        getline(f, s);
    fix_newlines(s);
    cout << s;
    return 0;
}