如何从文件中读取整数到动态数组

时间:2015-03-02 05:07:23

标签: c++ file-io

我正在尝试从文本文件中读取整数并将它们放入动态数组中,该数组将表示为分配的向量和矩阵。

输入文件中几行的示例:

3#456
33#123456789

井号前面的数字代表矢量或矩阵的元素,因此3#表示三元素矢量,33#表示一个3行3列的矩阵。

阅读那些并不是真正的问题,因为我们被告知我们可以假设我们知道哪些行是矩阵,哪些是向量,但是,我从来没有使用过C ++文件I / O所以我不会这样做知道如何遍历数字4,5,6并将它们放入3,9,12等元素动态创建的数组中。这里有一些我正在使用的样本。

int *a;
int size_a;
char x;

ifstream infile("input.txt");

if (infile.is_open())
{
    infile >> size_a;

    // The x is basically a junk variable used to go past the '#'
    // when reading the file
    infile >> x;

    a = new int[size_a];
}

之后,我不知道如何循环直到行结束并将其余元素放入数组中。例如,在这一行中,数字4,5和6需要放入一个数组,然后从添加元素中断,然后转到下一行来处理下一个数组,我不知道该怎么做。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

以下代码将为您执行此操作。请注意,您不需要在此处使用new - 您应该只使用std :: vector。在这种情况下,不需要'#'之前的数字,因为在创建数组时不需要指定数组的大小。

因此我在这里使用new来向您展示如何阅读文件的两个部分。

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

int main()
{
    std::ifstream file("input.txt");

    if(file.good()) {
        std::string line;
        std::getline(file, line);
        std::string::size_type pos = line.find('#');
        std::string strSize = line.substr(0, pos);
        std::string strValues = line.substr(pos + 1);
        int size = 0;

        for(char c : strSize) {
            if(size == 0)
                size = static_cast<int>(c - '0');
            else
                size *= static_cast<int>(c - '0');
        }

        int* values = new int[size];

        for(int i = 0; i < size; ++i) {
            values[i] = static_cast<int>(strValues[i] - '0');
        }

        std::cout << "Array of size " << size << " has the following values:" << std::endl;

        for(int i = 0; i < size; ++i) {
            std::cout << values[i] << std::endl;
        }

        delete[] values;
    }
}