读取每一行的不同列

时间:2019-11-09 22:04:40

标签: c++ freopen

我有一个像这样的文本文件:

1 2 3
4
5 6 7 8
just with money we can live
2 5

使用这段代码,我可以在屏幕上完整显示它,但是不能将其放在字符串中,并且其编译会产生错误:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
   while(getline(cin, line2)) {
       cout << line2 << endl;
       line2 >> test;
} 

1-是否可以将整个文本文件放入“测试”中?
2-而不是使用像这样的东西:

string test =
"1 2 3"
"4"
"5 6 7 8"
"just with money we can live"
"2 5";

是否可以使用循环和freopen或类似的东西?

我读了这个“ Read file line by line using ifstream in C++”,但它表示列数相同。

如果有一个网站可以回答我的问题,请给我。

2 个答案:

答案 0 :(得分:0)

让我们看看这个片段:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
while(getline(cin, line2)) {
       cout << line2 << endl;
}

这里发生的是,您将文本文件(不是完全准确的术语)重定向到标准输入流(此处由cin对象表示),并逐行阅读线。然后,在读取每一行之后,使用cout对象将其打印到标准输出流中。

将文件读入字符串所需要做的事情大致如下:

string test ="";
string line2;

freopen("a.txt", "rb", stdin);
while(getline(cin, line2)) {
       test += line2 + "\n";
}

在这里,您只需向test添加行。请注意,您还需要添加换行符,因为getline会将它们删除。

答案 1 :(得分:0)

将文件内容放入std::string很简单:

std::string test{std::istreambuf_iterator<char>{std::ifstream{"a.txt"}.rdbuf()},
                 std::istreambuf_iterator<char>{}};