Поиск самого длинного палиндрома-подстроки через перебор всех подстрок
Некоторые подстроки выводятся правильно, а вот в некоторых в конце происходит что-то непонятное. Ну и палиндромы в подстроках ищутся как-то не так, хотя алгоритм проверки работает нормально, если просто вводить её
void longest_palindrome(char *str, char *result)
{
printf("result = %s\n", result);
memset(result, 0, strlen(result) - 1);
printf("result = %s\n", result);
char ls[STR_BUFFER + 1];
_cpystr(ls, str, 1);
char sub[STR_BUFFER + 1];
if (isPalindrome(str))
{
_cpystr(result, str, strlen(str));
return;
}
for (int i = 0; i < strlen(str) - 1; i++)
{
for (int j = 1; j < strlen(str); j++)
{
if (i + j <= strlen(str))
{
printf("i = %d, j = %d ", i, j);
substr(str, i, j, sub);
printf("%s\n", sub);
if ((isPalindrome(sub)) && (strlen(sub) > strlen(ls)))
{
memset(ls, 0, strlen(ls) - 1);
_cpystr(ls, sub, strlen(sub) - 1);
}
memset(sub, 0, strlen(sub));
}
else
{
continue;
}
}
}
if (strlen(result) == 1)
{
strncpy(result, ls, strlen(ls) - 1);
}
}
int isPalindrome(char *str)
{
if (strlen(str) < STR_BUFFER)
{
char dst[STR_BUFFER];
int j = 0;
for (int i = strlen(str) - 2; i >= 0; i--, j++)
{
dst[i] = str[j];
}
return (strncmp(str, dst, strlen(str) - 1) == 0);
}
else
{
exit(BUFFER_OVERFLOW);
}
}
void _cpystr(char *dst, char *src, size_t cnt)
{
for (int i = 0; i < cnt; i++)
{
dst[i] = src[i];
}
}
void substr(char *s, int a, int b, char *t)
{
strncpy(t, s + a, b);
}