Почему бы не использовать std::stack
?Вам понадобятся два цикла, каждый из которых повторяет длину входной строки.В первом цикле один раз просмотрите строку ввода, поместив каждый символ в стек.Во втором цикле вытолкните символ из стека и сравните его с символом в индексе.Если вы получили несоответствие до окончания цикла, у вас нет палиндрома.Приятно то, что вам не нужно беспокоиться о угловом корпусе четной / нечетной длины.Это будет просто работать.
(Если вы склонны, вы можете использовать один стек (LIFO) и одну очередь (FIFO), но это существенно не изменит алгоритм).
Вотреализация:
bool palindrome(const char *s)
{
std::stack<char> p; // be sure to #include <stack>
for(int i = 0; s[i] != 0; i++)
p.push(s[i]);
for(int i = 0; s[i] != 0; i++)
{
if(p.top() != s[i])
return false; // not a palindrome!
p.pop();
}
return true;
}
Пропуск пробелов оставлен читателю в качестве упражнения;)