В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом - C (СИ)

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

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

Народ, помогите пожалуйста. Нужно написать программу, используя динамический массив. Вот условие задачи: В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом. Не могу понять как это сделать. Заранее спасибо!

Решение задачи: «В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом»

textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
 
#include<stdio.h>
#include<stdlib.h>
 
#define SIZE 100
 
int StrLen(char *s)
{
    int i;
 
    for (i = 0; s[i] != '\0'; i++);
    return i;
}
 
void RevStr(char *s, char *rev)
{
    int i, n = StrLen(s), j = n - 1;
    
    for (i = 0; i < n; i++)
    {
        rev[j] = s[i];
        j--;
    }
    rev[n] = '\0';
}
 
int  StrComp(const char* s1, const char* s2) {
    for (; *s1 && *s1 == *s2; *s1++, *s2++);
    return *s1-*s2;
}
 
void CheckPal(char *s, char *palyndrom)
{
    int i, j, k, num, max = 0, it = 0, it1 = 0;
    char word[SIZE];
    char revword[SIZE];
 
    if (s == NULL) exit(0);
    for (j = 0; j < StrLen(s); j++)
    {
        num = 0;
        for (i = j; i < StrLen(s); i++)
        {
            word[num] = s[i];
            word[num + 1] = '\0'; num++;
            RevStr(word, revword); 
            for (k = 0; k < StrLen(word); k++)
            if (StrComp(word, revword) == 0 && StrLen(word)>max)
            {
                max = StrLen(word);
                it = j;
            }
            else break;
        }
    }
    for (i = it; i < it+max; i++)   palyndrom[it1++] = s[i];    palyndrom[it1] = '\0';
}
 
int main()
{
    char *s="abcwalawqwelepsspel123";
    char palyndrom[SIZE];
    
    CheckPal(s, palyndrom);
    printf("%s\n", s);
    printf("%s\n", palyndrom);
}

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

  1. Включаем необходимые заголовочные файлы: и .
  2. Объявляем константу, определяющую размер строки (в данном случае 100 символов).
  3. Создаем функцию для вычисления длины строки.
  4. Создаем функцию для получения обратной строки.
  5. Создаем функцию для сравнения строк.
  6. Создаем функцию для проверки является ли строка палиндромом.
  7. В функции проверки палиндрома создаем переменные для хранения результата: исходной строки, обратной строки, номера первого символа палиндрома и максимальной длины палиндрома.
  8. Проходим по всем символам исходной строки и создаем подстроки, проверяем являются ли они палиндромами.
  9. Если подстрока является палиндромом и ее длина больше текущей максимальной длины палиндрома, обновляем значения переменных.
  10. Копируем символы палиндрома в выходную строку.
  11. В функции main создаем исходную строку и строку для хранения палиндрома.
  12. Вызываем функцию проверки палиндрома.
  13. Выводим исходную строку и найденный палиндром.

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


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

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

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