Нахождение самой длинной строки - C (СИ)

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

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

Помогите пожалуйста написать программу... Очень нужна ваша помощь... Задание: Напишите программу, чтобы найти самую длинный palindrome(палиндром) в цепи. Палиндром является строкой, которая читает так же, когда вы читаете это спереди, как если бы ее читать в обратном направлении (например ahojoha). Standard input will be several lines, each line will be one string. For each string input to output lists the longest palindrome, which is located in the input string as a continuo.us substring. If such is more, select the one that starts first.(Не знаю как это понять, по этому не смог перевести, приношу свои извинения...)

Пример: ВВОД: abbcca abcaabab Выход для образца ввода: bb aba

Помогите если знаете как написать... Заранее спасибо!!!

Решение задачи: «Нахождение самой длинной строки»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define maxLength 80
 
int Palindrom (char *str)
{
    int length = strlen(str);
    int i;
    for (i=0; i<length/2; i++)
        if (str[i]!=str[length-i-1])
            return 0;
    return 1;
}
 
int Find (char *str, char symbol, int beginIndex)
{
    int flag = -1, length = strlen(str);
    while (beginIndex < length)
    {
        if (symbol==str[beginIndex])
        {
            flag = beginIndex;
            break;
        }
        ++beginIndex;
    }
    return flag;
}
 
void FillString (char *dest, char *source, int beginIndex, int endIndex)
{
    int k = 0;
    while (beginIndex <= endIndex)
    {
        dest[k++] = source[beginIndex];
        ++beginIndex;
    }
}
 
int main()
{
    char str[maxLength]="",palindrom[maxLength]="",tmp[maxLength]="";
    int length,max = 0;
    int i=0,j,k;
    scanf ("%s",&str);
    length = strlen(str);
    while (i<length-1)
    {
        j=i+1;
        while (j<length)
        {
            k = Find(str,str[i],j);
            if (k!=-1)
            {
                strncpy (tmp,"",maxLength);
                FillString (tmp,str,i,k);
                if (Palindrom(tmp) && strlen(tmp) > max)
                {
                    strcpy (palindrom,tmp);
                    max = strlen(tmp);
                }
                j=k+1;
            }
            else break;
        }
        ++i;
    }
    printf ("%s\n",palindrom);
    return 0;
}

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

Код решает задачу поиска самой длинной строки-палиндрома в введенной строке.

  1. В функции Palindrom проверяется, является ли строка палиндромом. Если строка не является палиндромом, функция возвращает 0. Если строка является палиндромом, функция возвращает 1.
  2. В функции Find ищется первое вхождение указанного символа в строке, начиная с указанного индекса. Если символ не найден, функция возвращает -1.
  3. В функции FillString указанный символ копируется из одной строки в другую, начиная с указанного индекса и до конца строки.
  4. В функции main вводится строка с помощью scanf. Затем программа ищет самое длинное палиндромное подстроку в этой строке. Для этого она проходит по всем возможным подстрокам, начиная с пустой строки, и проверяет, является ли текущая подстрока палиндромом. Если да, и ее длина больше максимальной длины найденной ранее палиндромной подстроки, то она становится новой максимальной палиндромной подстрокой.
  5. Наконец, самая длинная палиндромная подстрока выводится на экран.

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


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

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

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