Non ti serve copiare la stringa e invertirla, né eliminare spazi e/o punteggiatura.
Prova a vedere se capisci come funziona questo spezzone di codine:codice:#include <iostream> #include <cstring> #include <cctype> using namespace std; int main() { char s[256]; cout << "Inserisci una frase: "; cin.getline(s, 256); bool pal = true; for(int i = 0, j = strlen(s) - 1; pal && (i < j); ) { bool si = isalpha(s[i]), sj = isalpha(s[j]); if(si && sj) { pal = pal && (toupper(s[i]) == toupper(s[j])); /* in questo caso sarebbe equivalente pal = toupper(s[i]) == toupper(s[j]); in quanto nella condizione d'uscita compare pal. Se così non fosse la forma in questo commento sarebbe scorretta. */ ++i; --j; } else { if(!si) ++i; if(!sj) --j; } } cout << (pal ? "Palindromi": "Non palindromi") << endl; return 0; }