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


Задача: написать функцию инвертирования порядка символов - часть 2


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




- Начало -  - Назад -  - Вперед -