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


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


/* Задача: написать функцию инвертирования порядка символов в массиве char. A B C D ---> D C B A В решении можно использовать рекурсию. */

/* Мы приведем рекурсивное и нерекурсивное решения (два варианта) */ #include

/* Сначала - несколько служебных функций. */

/* ФУНКЦИЯ ПОДСЧЕТА ДЛИНЫ СТРОКИ. Как уже объяснялось, строка текста - это массив char, в конце которого помещен символ '\0'. Сам символ \0 не считается. */ int strlen(char s[]){ /* функция от массива букв */ int counter = 0; /* счетчик и одновременно индекс */

while(s[counter] != '\0') /* пока не встретился признак конца текста */ counter++; /* посчитать символ */ return counter; /* сколько символов, отличных от '\0' */ }

/* ФУНКЦИЯ ПЕЧАТИ СТРОКИ. Печатаем каждый элемент массива как символ при помощи putchar(c). Как только встречаем элемент массива, равный '\0' - останавливаемся. Заметьте, что при наличии завершающего символа нам НЕ НАДО передавать в функцию размер массива, он нам неинтересен.

В конце эта функция переводит строку. */ int putstr(char s[]){ int i = 0; /* индекс */

while(s[i] != '\0'){ putchar(s[i]); i++; } putchar('\n'); return i; }

/* ТЕПЕРЬ МЫ ЗАНИМАЕМСЯ ФУНКЦИЕЙ ИНВЕРТИРОВАНИЯ. Для этого нам нужна вспомогательная функция: сдвиг элементов массива на 1 влево.

Исходный массив: A B C D E F <---------- Результат: B C D E F F - Последний элемент удваивается.

n - размер массива. Функция работает так:

Исходный массив: A B C D E F n=6 После i=1 B B C D E F После i=2 B C C D E F После i=3 B C D D E F После i=4 B C D E E F После i=5 B C D E F F i=6 ==> остановка.

*/ void shiftLeft(char s[], int n){ int i;

for(i=1; i < n; i++) s[i-1] = s[i]; }

/* Функция инвертирования. Идея такова: - если длина массива меньше или равна 1, то инвертировать нечего, ибо массив состоит из 1 или 0 элементов. - если длина массива > 1, то a) Спасти нулевой элемент массива. A B C D E F | | V tmp

b) Сдвинуть массив влево B C D E F F

c) В последний элемент массива поместить спасенный нулевой элемент. tmp | V B C D E F A




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