繁体   English   中英

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

[英]Putting text file content into a 2D 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数组,我将不胜感激。 谢谢。

您可以使用stringstream从每一行中提取数字。 另外,您不需要具有string s的数组。 您可以只使用一个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;
            }
        }
    }
}

如果尺寸发生变化,请使用以下代码。 请注意,您可以使用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";

  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM