交换地址的问题

Issue with swapping addresses

本文关键字:问题 地址 交换      更新时间:2023-10-16

我正在执行一项任务,在该任务中,我必须编写一个函数来执行以下操作-"您将分配一个空位数量大小的数组,并加载带有指向所有当前空位的指针的动态数组。首先使用最后一个空位构建数组。在同一个函数中,您将把所有传输移动到可用的房间(并将其标记为占用)使用指针的动态数组。您必须通过用空闲地址交换传输地址来完成此操作。从指针数组的后面开始,继续到前面执行这些操作,直到完成所有传输。不要重新处理指针数组。"这是我为了做到这一点而写的——

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;
}

我毫不怀疑,试图设置&hospitalFloors[i][k]指向一个指针,但无论我尝试什么不同的方法,我似乎都无法想出解决方案。

我的问题是,考虑到任务的要求,我如何将房间的地址与转移到有病人的房间进行交换,确保指针数组保持其顺序,但不重新处理它?

非常感谢您的帮助。

这个问题的措辞有点含糊。看起来你需要做的是将任何标记为转移('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--

您确实需要处理类型为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

数组确实表示。。。

您必须通过用空闲地址交换传输地址来完成此操作。

目前尚不清楚上面的地址是暗指[楼层][房间]方面,还是char*方面。不过,修改arr中的指针地址表面上没有意义,所以我假设是前者。

不过,您被要求按阵列的相反顺序执行此操作,但您当前再次在地板和房间上循环。我相信你可以自己解决。