Написать рекурсивную функцию определяющую слова-палиндромы - 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. Это позволяет избежать утечек памяти.