Нахождение самой длинной строки - 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;
}
Объяснение кода листинга программы
Код решает задачу поиска самой длинной строки-палиндрома в введенной строке.
- В функции
Palindromпроверяется, является ли строка палиндромом. Если строка не является палиндромом, функция возвращает 0. Если строка является палиндромом, функция возвращает 1. - В функции
Findищется первое вхождение указанного символа в строке, начиная с указанного индекса. Если символ не найден, функция возвращает -1. - В функции
FillStringуказанный символ копируется из одной строки в другую, начиная с указанного индекса и до конца строки. - В функции
mainвводится строка с помощьюscanf. Затем программа ищет самое длинное палиндромное подстроку в этой строке. Для этого она проходит по всем возможным подстрокам, начиная с пустой строки, и проверяет, является ли текущая подстрока палиндромом. Если да, и ее длина больше максимальной длины найденной ранее палиндромной подстроки, то она становится новой максимальной палиндромной подстрокой. - Наконец, самая длинная палиндромная подстрока выводится на экран.