Написать рекурсивную функцию определяющую слова-палиндромы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день! Задача - написать рекурсивную функцию определяющую слова-палиндромы, то есть читающиеся задом наперед также, то есть зеркальные вот что я вымучил:
Листинг программы
  1. int isPalindrome( const char * pal )
  2. {
  3. if ( *(pal) == *(pal+strlen(pal)-1) ) {
  4. if( strlen(pal) == 3 )
  5. return 1;
  6. char * npal = (char*)malloc(strlen(pal)-2);
  7. strncpy(npal,pal+1,strlen(pal)-2);
  8. npal[strlen(pal)-2]=0;
  9. return isPalindrome( npal );
  10. }
  11. return 0;
  12. }
Оговорюсь - функция должна быть с одним параметром - строкой(в си нет аргументов по-умолчанию) также она должна в отличие от моей не страдать утечками памяти. Хочется изящно! Спасибо

Решение задачи: «Написать рекурсивную функцию определяющую слова-палиндромы»

textual
Листинг программы
  1. int isPalindrome( const char * pal )
  2. {  
  3.     if ( *(pal) == *(pal+strlen(pal)-1) ) {
  4.         if( strlen(pal) == 3 )
  5.             return 1;
  6.        
  7.         char * npal = (char*)malloc(strlen(pal)-2);
  8.         strncpy(npal,pal+1,strlen(pal)-2);
  9.         npal[strlen(pal)-2]=0;
  10.        
  11.         int res = isPalindrome( npal );
  12.         free(npal);
  13.         return res;
  14.        
  15.     }
  16.     return 0;
  17. }

Объяснение кода листинга программы

В данном коде реализована рекурсивная функция isPalindrome, которая определяет является ли строка палиндромом.

  1. Функция принимает на вход указатель на строку (const char * pal).
  2. Проверяет, равны ли первый и последний символы строки. Если равны, то проверяет длину строки:
    • Если длина строки равна 3, то возвращает 1, так как все трехзначные числа являются палиндромами.
    • Если длина строки больше 3, то выполняет следующие действия:
      • Выделяет память под новую строку (npal), равную исходной строке, но без учета последнего символа и символа перед первым символом.
      • Копирует измененную часть исходной строки в новую строку (npal).
      • Освобождает память, выделенную под новую строку (npal).
      • Рекурсивно вызывает функцию isPalindrome для новой строки (npal).
      • Возвращает результат рекурсивного вызова функции isPalindrome.
  3. Если первый и последний символы строки не равны, то возвращает 0, так как строка не является палиндромом. В данном коде используется динамическое выделение памяти под новую строку (npal) с помощью функции malloc. После использования новой строки (npal), выделенная под нее память освобождается с помощью функции free. Это позволяет избежать утечек памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы