交换地址的问题

时间:2016-05-06 04:47:18

标签: c++ arrays pointers

我正在进行一项任务,其中我必须编写一个执行以下操作的函数 - "您将分配一个空格数量大小的数组,并使用指向所有当前空缺的指针加载动态数组。首先使用最后一个空缺来构建阵列。在同一个函数中,您将使用动态指针数组将所有传输移动到可用的房间(并将它们标记为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>

非常感谢任何帮助。

2 个答案:

答案 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中修改指针地址表面上没有意义,所以我假设前者。

虽然您被要求以相反的顺序执行此操作,但您目前正在环绕地板和房间。我相信你可以自己解决这个问题。