Он не печатает полный палиндром, потому что вы положили свой printf в чек.
if(str[i]==str[j])//if letters are same
{
printf("%c",str[i]);//print palindrome letter
/*is there a way I can store all the palindrome
characters in a string and print that string?*/
i++;//increment i
j--;//decrement j
}
Как видите, индексы "i" и "j" являются частью палиндрома, но вы печатаететолько я".Таким образом, будет напечатана только первая половина палиндрома.
Кроме этого, я думаю, что вам нужно разобраться со многими другими случаями, например, с несколькими палиндромами, и вам нужно выбрать самый большой.Например: abcxyzyxdefabcdedcbaxyz
Поэтому я предлагаю,
1) Реализовать функцию, которая возвращает наибольший палиндром из индекса i строки, если таковой имеется.
2) Вызовите эту функцию в цикле от индекса i = 0 до длины-2 исходной строки.
3) Сохранение текущего наибольшего индекса и длины палиндрома.Обновляйте его в каждом цикле.
4) В конце выведите самый большой палиндром.
Функция palindromelength () выполняет все, что я упомянул в шаге # 1.Но вместо того, чтобы печатать буквы, вы должны вернуть длину наибольшего палиндрома из него.
В main () вызывать palindromelength () в цикле с обновленным индексом, как показано ниже.
for(i=0; i<(len-1); i++)
{
palinrdomeLen = palindromelength(str, i, len-1);
if(palinrdomeLen > largestPalindromeLen)
{
largestPalindromeLen = palinrdomeLen;
largestPalindromeIdx = i;
}
}
Кроме этого в palindromelength (),
1) Вам необходимо обновить функцию, чтобы она возвращала длину палиндрома.
2) Поиск палиндрома должен возобновиться с индекса initial "я "когда str[i]!=str[j]
.
if(str[i]!=str[j])//if letters aren't same
{
i = i_initial; //i_initial is the "i" value passed to palindromelength()
j--;//only decrement j
}