Как напечатать 2D массив строк в обратном порядке - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать функцию в C, которая будет менять местами индексы моего 2D-массива, заменяя индекс последней строки на индекс первой строки на каждой итерации, пока весь массив не будет полностью перевернут.Например, данный пример строк:

I am human
hello world
et is real
i am the knight

должен вывести:

i am the knight
et is real
hello world
I am human

, используя мою функцию подкачки.Вместо этого я получаю вывод (последняя строка обрезается):

Ih am human
eello world
it is real

Функция, которую я набрал, выглядит следующим образом:

void swap(char array[][COLS], int start, int end)
{
    for(int i = 0; i >= ROWS; i++)
    {
        int temp = array[start][i];
        array[start][i] = array[end][i];
        array[end][i] = temp;
        end--;
    }
}

Я определил ROWSи COLS, чтобы быть размером 100. Что я делаю не так и как мне это исправить?

1 Ответ

0 голосов
/ 19 февраля 2019

Чтобы получить желаемый результат, вы не хотите использовать какое-либо назначение.Назначение, как вы, возможно, уже знаете, относится к установке одного фрагмента памяти равным другому.Другими словами, копирование.Все эти три строки в вашем коде являются присваивающими и вызывают создание копий:

int temp = array[start][i];
array[start][i] = array[end][i];
array[end][i] = temp;

Следующий метод потребует, чтобы ваш строковый массив был определен следующим образом:

char** array = {
    "I am human",
    "hello world",
    "et is real",
    "i am the knight"
};

Поскольку всеВы хотите распечатать содержимое в обратном порядке, вам просто нужно начать с конца строки и вернуться обратно к началу строки.Если это ваша функция печати

void printStrings(char** array, int start, int end)
{
    while(start!=end)
    {
        printf("%s\n",array[start]);
        ++start;
    }
}

Вы бы назвали это так, чтобы напечатать строки в обычном порядке:

printStrings(array,0,3);

Или

printStrings(array,0,sizeof(array)-1);

И чтобыраспечатайте его в обратном порядке, вам потребуется другая функция:

void printStringsReverse(char** array, int end, int start)
{
    while(end!=start)
    {
        printf("%s\n",array[end]);
        --end;
    }
}

И вы бы назвали эту функцию следующим образом:

printStringsReverse(array,3,0);

или

printStringsReverse(array,sizeof(array)-1,0);

Нет назначения не требуется.Копии не сделаны.Нет malloc используется.Вы просто печатаете то, что уже есть, поэтому вам не нужно ничего перемещать.Есть, конечно, много способов, которыми вы могли бы написать эти функции.На самом деле есть способ, которым вы могли бы написать обе функции, чтобы они были просто одной функцией.Но это простой метод, который будет иметь очень мало накладных расходов.

...