首页 > 解决方案 > 如何使用 istream_iterator 从 ifstream 中读取带空格的字符串?

问题描述

我想使用 逐行读取文本文件,istream_iterator但是当行中有空格时它会失败。

这是一个示例代码:

#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <string>

int main(int argc, char** argv)
{
  if (argc != 2) {
    std::cout << argv[0] << " <file-name>" << std::endl;
    return 10;
  }

  std::ifstream _in(argv[1]);
  if (!_in.good()) {
      std::cout << "error reading " << argv[1] << std::endl;
      return 20;
  }

  _in.unsetf(std::ios_base::skipws);

  std::istream_iterator<std::string> _ite(_in);
  std::istream_iterator<std::string> _end;
  std::string _s(*_ite);

  std::cout << "line read " << _s << std::endl;
}

例如,在这个输入文件中: 1;3.14;bla bla -3;0.923;let me go

读取的第一个字符串是1;3.14;bla

有没有办法做到这一点,还是我应该放弃并使用getline

标签: c++iostreamistream-iterator

解决方案



推荐阅读