【发布时间】:2015-03-02 05:07:22
【问题描述】:
我正在尝试从文本文件中读取整数并将它们放入一个动态数组中,该数组将表示为分配的向量和矩阵。
输入文件中的几行示例:
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 放入 a 数组中,然后停止添加元素并转到下一行处理下一个数组,我不知道该怎么做做任何一个。有什么想法吗?
【问题讨论】:
-
...您没有使用动态数组。你想要
std::vector -
不需要向量;
new使操作能够创建大小在运行时而不是在编译时已知的数组。你是对的,这些不是动态调整大小的数组,但它们确实符合 OP 的要求,其中不包括调整大小——只是不知道先验的大小。 -
您需要将每个数字流式传输到
char变量中(例如“c”),然后您可以使用表达式c - '0'将其从ASCII 转换为数字。使用这些数字获取正确的size_a等值,以及要写入数组/矩阵的元素值。