Creo que tienes 2 errores en el codigo, el primero y mas notable es que la funcion LongCad siempre retorna cero y deberia retornar "i", el segundo es en esta linea "while (palabra[q] < p)", deberia ser "while (q < p)"
/*
5.Hacer un programa que contenga una función con el prototipo bool Palindromo(char palabra[40]);.
La función debe devolver true si la palabra es un palíndromo, y false si no lo es.
Una palabra es un palíndromo si cuando se lee desde el final al principio es igual que leyendo desde el principio,
por ejemplo: "Otto", o con varias palabras "Anita lava la tina", "Dábale arroz a la zorra el abad".
En estos casos debemos ignorar los acentos y los espacios, pero no es necesario que tu función haga eso,
bastará con probar cadenas como "anitalavalatina", o "dabalearrozalazorraelabad".
La función no debe hacer distinciones entre mayúsculas y minúsculas.
*/
#include <iostream>
#include <string>
using namespace std;
bool Palindromo(char palabra[40]);
int LongCad(char[]);
int main() {
char posiblePalindromo[40];
cout << "Introduce tu palindromo: ";
cin >> posiblePalindromo;
if (Palindromo(posiblePalindromo)) cout << "\nSi es un palindromo." << endl << endl;
else cout << "\nNo es un palindromo." << endl << endl;
cin.sync();
cin.get();
return 0;
}
bool Palindromo(char palabra[40]) {
char copia[40];
strcpy(copia, palabra);
int q = 0, p = LongCad(palabra)-1, aux;
while (q < p) {
aux = palabra[q];
palabra[q] = palabra[p];
palabra[p] = aux;
q++;
p--;
}
if (strcmp(palabra, copia) == 0) return true;
else return false;
}
int LongCad(char a[]) {
int i = 0;
while (a[i]) i++;
return i;
}