В строке символов найти максимальную подпоследовательность символов, являющуюся палиндромом - 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); }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
и . - Объявляем константу, определяющую размер строки (в данном случае 100 символов).
- Создаем функцию для вычисления длины строки.
- Создаем функцию для получения обратной строки.
- Создаем функцию для сравнения строк.
- Создаем функцию для проверки является ли строка палиндромом.
- В функции проверки палиндрома создаем переменные для хранения результата: исходной строки, обратной строки, номера первого символа палиндрома и максимальной длины палиндрома.
- Проходим по всем символам исходной строки и создаем подстроки, проверяем являются ли они палиндромами.
- Если подстрока является палиндромом и ее длина больше текущей максимальной длины палиндрома, обновляем значения переменных.
- Копируем символы палиндрома в выходную строку.
- В функции main создаем исходную строку и строку для хранения палиндрома.
- Вызываем функцию проверки палиндрома.
- Выводим исходную строку и найденный палиндром.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д