Написать рекурсивную функцию определяющую слова-палиндромы - C (СИ)
Формулировка задачи:
Добрый день! Задача - написать рекурсивную функцию определяющую слова-палиндромы,
то есть читающиеся задом наперед также, то есть зеркальные
вот что я вымучил:
Оговорюсь - функция должна быть с одним параметром - строкой(в си нет аргументов по-умолчанию)
также она должна в отличие от моей не страдать утечками памяти.
Хочется изящно!
Спасибо
int isPalindrome( const char * pal ) { if ( *(pal) == *(pal+strlen(pal)-1) ) { if( strlen(pal) == 3 ) return 1; char * npal = (char*)malloc(strlen(pal)-2); strncpy(npal,pal+1,strlen(pal)-2); npal[strlen(pal)-2]=0; return isPalindrome( npal ); } return 0; }
Решение задачи: «Написать рекурсивную функцию определяющую слова-палиндромы»
textual
Листинг программы
int isPalindrome( const char * pal ) { if ( *(pal) == *(pal+strlen(pal)-1) ) { if( strlen(pal) == 3 ) return 1; char * npal = (char*)malloc(strlen(pal)-2); strncpy(npal,pal+1,strlen(pal)-2); npal[strlen(pal)-2]=0; int res = isPalindrome( npal ); free(npal); return res; } return 0; }
Объяснение кода листинга программы
В данном коде реализована рекурсивная функция isPalindrome, которая определяет является ли строка палиндромом.
- Функция принимает на вход указатель на строку (const char * pal).
- Проверяет, равны ли первый и последний символы строки. Если равны, то проверяет длину строки:
- Если длина строки равна 3, то возвращает 1, так как все трехзначные числа являются палиндромами.
- Если длина строки больше 3, то выполняет следующие действия:
- Выделяет память под новую строку (npal), равную исходной строке, но без учета последнего символа и символа перед первым символом.
- Копирует измененную часть исходной строки в новую строку (npal).
- Освобождает память, выделенную под новую строку (npal).
- Рекурсивно вызывает функцию isPalindrome для новой строки (npal).
- Возвращает результат рекурсивного вызова функции isPalindrome.
- Если первый и последний символы строки не равны, то возвращает 0, так как строка не является палиндромом. В данном коде используется динамическое выделение памяти под новую строку (npal) с помощью функции malloc. После использования новой строки (npal), выделенная под нее память освобождается с помощью функции free. Это позволяет избежать утечек памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д