读取由空格分隔的未知数量的整数到每行一个向量

B.K*_*.K. 1 c++ vector readfile

我文件的每一行都包含一个未知数量的整数,这些整数用空格分隔.我想在每一行中读取这些整数的向量.

以下是此类文件的示例:

11 3 0 1
4 5 0 3
2 3 4 1
23 4 25 15 11
0 2 6 7 10
5 6 2
1
11
Run Code Online (Sandbox Code Playgroud)

我已经能够使用以下方法成功读取少量数据(请注意,outer_layers是包含我试图填充的这些向量的向量):

for (int i = 0; i < outer_layers.size(); i++)
{
    while (in >> temp_num)
    {
        outer_layers[i].inner_layer.push_back(temp_num);
        if (in.peek() == '\n')
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试读取大量数据时,有时它会在一个向量下读取两行.在其中一个文件中,在24行中,它有两次读取两行,因此最后两个向量没有任何数据.

我无法绕过它.我有什么想法我做错了吗?

编辑:我在麻烦制造者文件的一些行中注意到的一些有趣的事情是这样的:

比方说有三行.

23 42 1 5
1 0 5 10
2 3 11
Run Code Online (Sandbox Code Playgroud)

第1行读入就好了23 42 1 5; 然而,第2行和第3行一起读取1 0 5 10 2 3 11.

在Notepad ++中,它们看起来很好,每个都在各自的行上.但是,在记事本中,它们看起来像这样:

23 42 1 51 0 5 10 2 3 11
Run Code Online (Sandbox Code Playgroud)

如果你注意到,5(#1行的最后一个整数)和1(#2行的第一个整数)之间没有用空格分隔; 然而,102用空格分开.

我已经注意到任何双读入行的行为.如果它们被一个空格隔开,那么它们都被读入.不确定为什么会发生这种情况,考虑到Notepad ++中仍然应该有一个新的行字符来显示单独的行,我是对的吗?

P0W*_*P0W 5

我不知道你是如何outer_layersinner_layers是安装,但您可以使用std::getline,并std::stringstream填写您的载体是这样的:

    std::vector< std::vector<int> > V ;
    std::vector <int> vec;

    std::ifstream fin("input.txt");

    std::string line;
    int i;
    while (std::getline( fin, line) ) //Read a line 
    {
       std::stringstream ss(line);

       while(ss >> i) //Extract integers from line
         vec.push_back(i);

       V.push_back(vec); 
       vec.clear();

    }

  fin.close();

  for(const auto &x:V)
  {
    for(const auto &y:x)
      std::cout<<y<<" ";
    std::cout<<std::endl;
  }
Run Code Online (Sandbox Code Playgroud)