【问题标题】:How to iterate over a line in a file? [duplicate]如何遍历文件中的一行? [复制]
【发布时间】:2017-02-02 13:11:18
【问题描述】:

我有一个文件,其中包含按行组织并用空格分隔的整数。行数和行长都是未知的。

我目前正在逐行迭代文件,我正在尝试逐个字符地迭代每一行,但我遇到了一些麻烦。我目前正在将每一行的内容存储到一个字符串中,但我怀疑这不是最好的方法,我希望有人能指出我正确的方向。

这是我当前的代码,它只是打印文件中的每一行:

std::string filename = "values.txt";
std::ifstream file(filename.c_str());
std::string line;

while (std::getline(file, line))
{
    std::cout << line << std::endl;
}

我来自 python,它可以很容易地实现这个,像这样:

for line in file:
    for char in line:
        print char

但是,不知道 for 循环的长度/行数让我很失望,因为我对 c++ 还很陌生。我还想将字符读取为整数而不是字符串,但我也无法弄清楚这一点。在 c++ 中实现这一点的最正确方法是什么?

非常感谢任何帮助。

【问题讨论】:

  • 你检查过here和here吗?
  • 我不明白你的问题是什么?阅读带有std::getline() 的行,如您所见是完美的。
  • 您可以在之前的帖子中使用this answer,该帖子将告诉您如何拆分从每一行获得的字符串,然后您可以对单个字符串进行操作(将它们转换为整数、双精度数、等等...)
  • 你熟悉stringstream吗?
  • this answer 可能会让您非常接近。从那里,如果需要,您可以很容易地将数据行存储到向量集中。 stackoverflow 上有很多例子。

标签: python c++


【解决方案1】:

你快到了;您可以使用格式化流提取来读取整数,使用字符串流来表示每一行:

#include <fstream>
#include <sstream>
#include <string>

// ...

for (std::string line; std::getline(infile, line); )
{
    std::istringstream iss(line);
    for (int n; iss >> n; )
    {
        std::cout << "Have number: " << n << "\n";
    }
    std::cout << "End of line\n";
}

可以通过检查整个字符串流是否已经被消费来添加错误检查。

【讨论】:

  • 这正是我所需要的!非常感谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2018-12-01
  • 1970-01-01
  • 2012-08-06
  • 2020-02-02
相关资源
最近更新 更多