Четыре ошибки
Сначала у вас есть три случая, но вы хотите, чтобы только один из них выполнялся, поэтому это должен быть один оператор if ... else if ... else ...
, а не оператор if ... if ... else ...
, который у вас есть.
Во-вторых, ваше сравнение неверно, потому что вы сравниваете указатели, а не те символы, на которые они указывают.
Третья ошибка аналогична второй, когда вы пытаетесь сократить строку, которую вы назначаете указателю, а нек символу.
Наконец, вы забыли присвоить результат рекурсивного вызова вашей переменной result
.Довольно распространенная ошибка новичка.
Вот мои усилия (непроверенный код)
bool isPalindrome(char *copy)
{
bool result = false;
int size = charCount(copy);
char * last = ©[size - 1];
if (size <= 1)
{
result = true;
}
else if (*copy != *last) // else if and *copy != *last, not copy != last
{
result = false;
}
else
{
++copy;
*last = '\0'; // *last not last
result = isPalindrome(copy); // capture return value from recursive call
}
return result;
}
Четыре ошибки в одной функции могут показаться довольно большими, но это глупые ошибки, которые легко исправить.Общее качество кода довольно хорошее.
Теперь для дополнительной информации посмотрим, сможете ли вы написать версию, которая не будет уничтожать строку, как она есть.Поскольку вы назначаете *last = '\0'
, вы меняете строку во время работы.