将文本文件内容放入2D数组中

时间:2015-05-27 06:49:07

标签: c++ arrays multidimensional-array

我试图将200 x 1000个数字的文本文件读入数组。每个数字由制表符分隔。我认为使用2D数组会对这种情况有好处,因为它可以让我区分各行。在这种情况下能够区分各行是很重要的,这就是为什么我想以这种方式做到这一点。现在我有以下内容:

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    ifstream file("text.txt");
    if(file.is_open())
    {
        string myArray[1000];

        for(int i = 0; i < 1000; ++i)
        {
            file >> myArray[i];
            cout << myArray[i] << endl;
        }
    }
}

当前将第一行数字扫描到数组中,然后将其打印出来。我想要一个2D数组,将每个单独的行扫描到数组中,但要将它们分开。这意味着第1行的内容与第2行的内容是分开的。我认为2D数组会这样做。我有点卡在这一部分。我尝试通过使用嵌套for循环来制作2D数组,但是当我尝试将值复制到数组中时,事情开始出错。订单不正确,行没有分开。我用C ++编写代码。如果有人可以帮我理解如何导入像我描述的那样的文本文档并将所有信息发送到2D数组,我将非常感激。谢谢。

2 个答案:

答案 0 :(得分:0)

您可以使用stringstream从每行中提取数字。此外,您不需要具有string的数组。您只需使用一个string

int main()
{
    ifstream file("text.txt");
    if(file.is_open())
    {
        for(int i = 0; i < 1000; ++i)
        {
            string row;
            if ( std::getline(file, row) )
            {
               std::istringstream istr(row);
               int number;
               while ( istr >> number )
               {
                  // Add the number to a container.
                  // Or print it to stdout.
                  cout << number << "\t";
               }
               cout << endl;
            }
        }
    }
}

答案 1 :(得分:0)

如果尺寸发生变化,请使用以下代码。请注意,您可以使用std::copystd::stringstream复制到std::vector

#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>

int main()
{
  std::string input =
    "11 12\n"
    "21 22\n"
    "31 32\n"
    "41 42\n"
    ;

  std::stringstream file(input);

  std::string temp;
  while (std::getline(file, temp)) {

    std::stringstream line(temp);

    std::vector<std::string> v;
    std::copy(
        std::istream_iterator<std::string>(line),
        std::istream_iterator<std::string>(),
        std::back_inserter(v));

    for (auto x: v)
      std::cout << x << " ";

    std::cout << "\n";

  }
}