我希望并想知道是否有人可以帮助我理解如何在 C++ 中执行以下操作: 使用命令行输入重定向将文件的内容存储到二维数组中。
这些文件将有未知数量的 3 列行。像这样:20 42 0.00 15 67 2.41 70 53 9.88
所以需要制作一个可以容纳x个数组的数组。X 是文件中的行数。每个内部数组将保存该行的一列。
我不知道如何做到这一点,但我真诚地感谢任何和所有帮助和指导如何做到这一点。
提前致谢并致以最诚挚的问候!
我希望并想知道是否有人可以帮助我理解如何在 C++ 中执行以下操作: 使用命令行输入重定向将文件的内容存储到二维数组中。
这些文件将有未知数量的 3 列行。像这样:20 42 0.00 15 67 2.41 70 53 9.88
所以需要制作一个可以容纳x个数组的数组。X 是文件中的行数。每个内部数组将保存该行的一列。
我不知道如何做到这一点,但我真诚地感谢任何和所有帮助和指导如何做到这一点。
提前致谢并致以最诚挚的问候!
由于这看起来像家庭作业,这里有一些基本提示。
您可以使用管道将一个命令的输出作为另一个命令的输入,例如:
cat myfile.txt | myprogram
myprogram
然后可以使用 读取数据cin
。
这应该足以让你开始。
static const size_t START_SIZE = 100;
//allocate array of pointers
double** flt_arr = new double*[START_SIZE];
size_t current_size = START_SIZE;
size_t current_index = 0;
while (!cin.eof())
{
double flt1, flt2, flt3;
cin >> flt1 >> flt2 >> flt3;
//check stream for bad read
if (cin.fail())
{
cerr << "Input error on line " << current_index + 1 << "!" << endl;
break;
}
if (current_size == current_index)
{
//grow array
current_size += START_SIZE;
double** tmp_arr = new double*[current_size];
for (size_t count = 0; count < current_index; count++)
{
tmp_arr[count] = flt_arr[count];
}
delete [] flt_arr;
flt_arr = tmp_arr;
}
//allocate row for current line
flt_arr[current_index] = new double[3];
flt_arr[current_index][0] = flt1;
flt_arr[current_index][1] = flt2;
flt_arr[current_index][2] = flt3;
current_index++;
}
//clean up rows
for (size_t count = 0; count < current_index; count++)
{
delete [] flt_arr[count];
}
//clean up array of pointers
delete [] flt_arr;