Frase palindroma.

di il
1 risposte

Frase palindroma.

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;
}

1 Risposte

  • Re: Frase palindroma.

    Credo proprio che l'input non vada aggiunto carattere per carattere, ma deve essere costituito da un'unica stringa!
    Inizia ad aggiustare e poi ragioniamo sul resto.
Devi accedere o registrarti per scrivere nel forum
1 risposte