Печать перевернутой строки / массива в C - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь напечатать обратную строку / массив.Я использовал следующий код, и он, похоже, может дать моему второму массиву revString значения в правильном порядке из первого массива string.Я также могу печатать отдельные символы в обоих массивах, и я могу напечатать всю строку первого массива.Однако массив revString вообще не печатается.Мне интересно, упускаю ли я здесь огромную точку.

void reverseString(char string[]) {
    int i = strlen(string);
    int i_2 = 0;
    revString arrayet
    char revString[i + 1];
    char *character; 

    while (i > -1) {
        character = &string[i];
        revString[i_2] = *character;
        printf("%c", revString[i_2]);
        i = i - 1;
        i_2 = i_2 + 1;
    }
    revString[i_2] = '\0';
    printf("%d\n", i_2);
    printf("%s", revString);
}

Теперь код дает следующий вывод с примером строки "Hello World";

dlrow olleH13

Как вы можете видетьокончательный printf оператор ничего не делает

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Ваш код переворачивает строку string, включая нулевой терминатор на string[i]. Результирующий массив начинается с нулевого терминатора, поэтому printf ничего не выводит.

Вот модифицированная версия:

void reverseString(char string[]) {
    int i = strlen(string);
    int i_2 = 0;
    char revString[i + 1];
    char character;

    while (i > 0) {
        i = i - 1;
        character = string[i];
        revString[i_2] = character;
        //printf("%c", revString[i_2]);
        i_2 = i_2 + 1;
    }
    revString[i_2] = '\0';
    printf("%d\n", i_2);
    printf("%s", revString);
}

Выход:

11
dlrow olleH
0 голосов
/ 09 сентября 2018

В языке C индексирование основано на 0. поэтому, если вы сделаете строку длиной 10, последний символ будет с индексом 9.

В вашем коде, когда вы назначаете символы для revString, ваш код пытается получить доступ к строке [len].

ваш код должен быть таким ..

int i = strlen(string) - 1;

...