我正在进行一项任务,其中我必须编写一个执行以下操作的函数 - "您将分配一个空格数量大小的数组,并使用指向所有当前空缺的指针加载动态数组。首先使用最后一个空缺来构建阵列。在同一个函数中,您将使用动态指针数组将所有传输移动到可用的房间(并将它们标记为OCCUPIED)。您必须通过将传输地址与空闲地址进行交换来执行此操作。从指针数组的后面开始,继续前面进行这些操作,直到完成所有传输。不要重复使用指针数组。"这是我为了做到这一点而写的 -
char** tranfers(char hospitalFloors[FLOOR_ARRAY_SIZE][ROOM_ARRAY_SIZE], int &num)
{
int x = 0;
char *temp;
for (int i = 0; i < FLOOR_ARRAY_SIZE; i++)
{
for (int k = 0; k < ROOM_ARRAY_SIZE; k++)
{
if(hospitalFloors[i][k] == 'V')
{
num++;
}
}
}
char **arr = new char*[num];
for (int i = (FLOOR_ARRAY_SIZE - 1); i >= 0; i--)
{
for (int k = (ROOM_ARRAY_SIZE - 1); k >= 0; k--)
{
if (hospitalFloors[i][k] == 'V')
{
arr[x] = &hospitalFloors[i][k];
x++;
}
}
}
for (int i = 0; i < FLOOR_ARRAY_SIZE; i++)
{
for (int k = 0; k < ROOM_ARRAY_SIZE; k++)
{
if (hospitalFloors[i][k] == 'T')
{
x--;
temp = arr[x];
arr[x] = &hospitalFloors[i][k]
&hospitalFloors[i][k] = temp;
}
}
}
return arr;
}
我毫不怀疑在尝试将&amp; hospitalFloors [i] [k]设置为指针时存在问题,但无论我尝试不同,我似乎无法想出一个解决方案。
我的问题是,考虑到作业要求的内容,我如何将房间的地址与转移到有病人的房间交换,确保指针数组保持其顺序,但不重新处理它? / p>
非常感谢任何帮助。
答案 0 :(得分:0)
问题的措辞有点含糊不清。看起来你需要做的是将标记为转移('T')的任何房间移动到空房('V')并将其标记为占用(假设为'O')并将房间转移为空置。
所以您需要做的就是在上一个if
块中采取适当的步骤。
*arr[x] = 'O'; // set vacant room as occupied.
hospitalFloors[i][j] = 'V'; // set transfer room as vacant
arr[x] = &hospitalFloors[i][j]; // make the vacancy element point at the now vacant room
当然要保持x--
答案 1 :(得分:0)
您需要处理char
类型的指向数据。虽然作业说“交换”,但它也说要标记被占用的移动受让人房间,你可以直接做:
*arr[x] = 'O';
hospitalFloors[i][k] = 'V';
首先使用“交换”字面意思:
char temp = *arr[x]; // was vacant
*arr[x] = hospitalFloors[i][k]; // assign transfer
hostpitalFloors[i][k] = temp; // make vacant
*arr[x] = 'O'; // make occupied
阵列确实说......
您必须通过将转移地址与空转地址进行交换来完成此操作。
目前尚不清楚上述地址是否暗示[floor] [room]方面或char*
方面。虽然在arr
中修改指针地址表面上没有意义,所以我假设前者。
虽然您被要求以相反的顺序执行此操作,但您目前正在环绕地板和房间。我相信你可以自己解决这个问题。