c ++读取文本文件并将数字输入到2D数组中

时间:2013-08-12 00:33:19

标签: c++ arrays vector

我在这项任务的开始阶段真的很挣扎。我需要让用户在命令行上输入文本文件的名称。该文件将是一个以空格分隔的整数列表。我想查看数字并将它们输入到2D数组或向量中。这将永远是一个方形的数组,所以如果有100个数字,我可以做10X10。 我对(1维)数组(对于一个近2个月的初学者)很满意,但我真的很困惑从文本文件方面获取输入。 我不熟悉的主要部分是从文本文件和动态数组中读取(因为直到运行时我才知道大小。我在这里使用getline吗?

2 个答案:

答案 0 :(得分:2)

C ++支持基本上根据需要调整大小的向量,因此允许您拥有任意大小的“数组”。您将使用getline读取每一行并创建向量。

你可以使用ifstream打开文件:ifstream fileToRead("file.txt");然后你就可以从fileToRead中读取它就像是cin;

我们可以通过以下方式声明二维数组:

vector< vector<int> > SquareArray;

然后你可以开始阅读文件并输入它。

for (int i = 0; i < N; ++i)
{
    vector<int> row;
    for (int j = 0; j < N; ++j)
    {
         //same limit because its square
         int readFromFile = 0;
         fileStream >> readFromFile;
         row.push_back(readFromFile);
    }
    SquareArray.push_back(row); //copies row into SquareArray
}

答案 1 :(得分:0)

首先,打开文本文件:

std::ifstream in("in.txt");

然后从文件中获取每一行,我们使用getline。我们还需要一个字符串来保存该行的内容。这包含在<string>标题中。

#include <string>

我们还需要继续读取每一行,直到到达文件末尾,因此我们需要一个循环机制。例如:

std::string str;
while (std::getline(in, str))

getline返回流文件,如果在读取输入时发生错误,则会在其基础位掩码中设置任何位。这就是循环的工作方式。

在循环内部,我们需要将字符串存储在字符串流中并将其传递给向量。像这样:

std::vector<std::vector<int>> orig(10, std::vector<int>(10)); //  Your original 2D array

int i = 0;
while (std::getline(in, str))
{
    std::stringstream ss(str);
    std::vector<int>& v = orig[i];

    std::copy(std::istream_iterator<int>(ss),
              std::istream_iterator<int>(), std::back_inserter(v));

    ++i;
}

对于上述代码,您需要<iterator><algorithm>标题。