Руководство полного чайника по программированию на языке Си


           

ВТОРАЯ ВЕРСИЯ нерекурсивна. Рекурсия заменена


d) Инвертировать начало массива длиной n-1. {B C D E F}A
Получится: F E D C B A
Что и требовалось.
s[] - массив, n - его длина. */ void reverse(char s[], int n){ char tmp;
if(n <= 1) /* нечего инвертировать */ return;
tmp = s[0]; /* спасти */ shiftLeft(s, n); /* сдвинуть */ s[n-1] = tmp; /* переместить */
reverse(s, n-1); /* инвертировать начало */ }
/* ВТОРАЯ ВЕРСИЯ нерекурсивна. Рекурсия заменена циклом. Длина начала массива, которую надо инвертировать, вынесена на переменную length. */ void reverse1(char s[], int n){ char tmp; int length;
for(length=n; length > 1; --length){ tmp = s[0]; shiftLeft(s, length); s[length-1] = tmp; } }
char testString[] = "abcdefghijklmnopqrstuvwxyz";
/* Если не задать размер массива, он будет вычислен компилятором автоматически. Он будет равен числу букв внутри "..." ПЛЮС одна ячейка для невидимого символа '\0' на конце. В данном случае это 27. */
void main(){ int len;
len = strlen(testString); /* вычислить длину строки: 26 ('\0' на конце не считается) */
printf("Строка для теста: \"%s\", ее длина %d\n", testString, len); /* Обратите внимание на два момента: - строку (массив char) следует печатать по формату %s - чтобы внутри "..." напечатать символ " надо изобразить его как \"
А чтобы в putchar напечатать символ ' надо писать putchar('\''); */
/* Первая инверсия */ reverse(testString, len); putstr("Инвертированная строка:"); putstr(testString);
/* Вторая инверсия - возвращает в исходное состояние */ reverse1(testString, len); putstr("Инвертированная в исходное состояние строка:"); putstr(testString); }

Содержание  Назад  Вперед