Salve a tutti,
avrei un problema con un esercizio in cui mi si chiede di scrivere un programma che determini se una frase è palindroma o no, vi allego la consegna:
Esercizio:
Data una frase qualsiasi (max. 1000 caratteri), terminata da “a capo” o da “punto” (carattere '.'), determinare se la frase è palindroma oppure no. Una frase è palindroma se letta al rovescio rimane identica. N.B. Ai fini del palindromo non si distingue tra maiuscolo e minuscolo e non si considerano spazi, accenti e segni di interpunzione. SUGG. Memorizzare (in un array di caratteri) soltanto i caratteri alfabetici, eventualmente convertiti da maiuscolo a minuscolo ...
Esempi di frasi/parole palindrome
radar
I topi non avevano nipoti
Amica di Pirati vede ed evita ripida cima
Sono riuscito a scrivere il programma in modo che riconoscesse se una frase e palindroma o no, ma il problema sopraggiunge quando dice che il programma non distingue le lettere accentate, cosa che non sono riuscito a risolvere con tutti quegli if dato che ora mi qualunque frase inserisco mi dice che è palindroma. Inoltre il programma dovrebbe terminare con un punto o a capo, ma pur riprovando il programma termina solo con il punto, mentre \n non lo considera proprio e dunque anche premendolo il programma continua.
Vi allego il programma che ho scritto:
#include <iostream>
using namespace std;
int main()
{
const int dim = 1000;
char c, sequenza[dim];
int i = 0;
cout << "Inserisci sequenza di caratteri di massimo 1000 caratteri (terminata da punto o a capo): " << endl;
cin >> c;
while (c != '.' && c != '\n' && i < dim)
{
if (c != ' ' && c != ',' && c != ';' && c != ':' && c != '-' && c != '!' && c != '?' && c != '*' && c != '"' && c != '(' && c != ')' && c != ')' && c != '[' && c != ']' && c != '{' && c != '}' && c != '/')
{
sequenza = c;
i++;
cin >> c;
}
}
int n = i;
for (int i = 0; i < n; i++)
{
if (sequenza >= 'A' && sequenza <= 'Z')
sequenza = sequenza + 32;
}
for (int i = 0; i < n; i++)
{
if (sequenza == 'à')
sequenza = 'a';
else if (sequenza == 'è')
sequenza = 'e';
else if (sequenza == 'ì')
sequenza[i] = 'i';
else if (sequenza[i] == 'ò')
sequenza[i] = 'o';
else (sequenza[i] == 'ù');
sequenza[i] = 'u';
}
i = 0;
while (i < n/2 && sequenza[i] == sequenza[n - i - 1] )
{
i++;
}
if (i == n/2)
cout << "La sequenza di caratteri digitata e' palindroma." << endl;
else
cout << "La sequenza di caratteri digitata non e' palindroma." << endl;
return 0;
}