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

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

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


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

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

12   голосов , оценка 3.833 из 5
Похожие ответы