[C] Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome
Salve. Ho un problema con un esercizio.
b]Traccia: Scrivere un programma in linguaggio C che riceve in ingresso una parola inserita da tastiera. Si consideri che la parola può contenere sia caratteri maiuscoli che caratteri minu scoli, e complessivamente al massimo 30 caratteri. Il programma deve svolgere le seguenti operazioni:
•visualizzare la parola inserita
•aggiornare la parola in modo che tutti i caratteri siano minuscoli. Il programma deve
visualizzare la parola ottenuta
•verificare se la parola è palindroma. Una parola è palindroma se può essere letta
indifferentemente da sinistra verso destra e da destra verso sinistra. Ad esempio, le
seguenti parole sono palindrome: otto, madam.
Perchè non funziona? Ho provato ad inserire un printf per stampare a video $n$ e $l$ e ad esempio con la parola oTTo, $n$ mi risulta $0$ e non $4$, con la parola MaDaM $n$ mi risulta $-7$ e non $5$.
Vi ringrazio in anticipo
b]Traccia: Scrivere un programma in linguaggio C che riceve in ingresso una parola inserita da tastiera. Si consideri che la parola può contenere sia caratteri maiuscoli che caratteri minu scoli, e complessivamente al massimo 30 caratteri. Il programma deve svolgere le seguenti operazioni:
•visualizzare la parola inserita
•aggiornare la parola in modo che tutti i caratteri siano minuscoli. Il programma deve
visualizzare la parola ottenuta
•verificare se la parola è palindroma. Una parola è palindroma se può essere letta
indifferentemente da sinistra verso destra e da destra verso sinistra. Ad esempio, le
seguenti parole sono palindrome: otto, madam.
#include <stdio.h> #include <string.h> #include <ctype.h> #include <unistd.h> #define N 30 main () { char str1[N], str2[N]; int i, j, l, n; printf("Inserire la parola da analizzare\n"); gets(str1); printf ("La parola da analizzare e %s\n", str1); //conversione da maiuscoli a minuscoli for( i=0; i<N ; i++ ) { str1[i] = tolower(str1[i]); } printf("Converto la parola in minuscolo...\n"); sleep (3); printf("La parola convertita e' %s\n", str1); l=strlen(str1); n=0; strcpy(str2,str1); for (i=0; i<l; i++){ for (j=l-1; j>=0; j--){ if (str1[i]==str2[j]){ n++; } else n--; } } if (n==l){ printf("La parola e' palindroma"); } else printf("La parola non e' palindroma"); }
Perchè non funziona? Ho provato ad inserire un printf per stampare a video $n$ e $l$ e ad esempio con la parola oTTo, $n$ mi risulta $0$ e non $4$, con la parola MaDaM $n$ mi risulta $-7$ e non $5$.
Vi ringrazio in anticipo
Risposte
Ciao, prova con questo codice, ti conviene agire direttamente sulla str1 per verificare se è palindroma
se ti copi la str1 in una nuova str2, farai riferimento a 2 stringhe diverse e non potrai mai verificarne la palindromicità (se mi si può passare il termine)..
ps: puoi eliminare sia ctype, unistd, che string in quanto non ne fai uso nel programma
se ti copi la str1 in una nuova str2, farai riferimento a 2 stringhe diverse e non potrai mai verificarne la palindromicità (se mi si può passare il termine)..
///////////// palindroma _Bool palindroma = false; for(i=0; i<l; i++) { if(str1[i] == str1[l-i-1]){ palindroma = true; continue; } else palindroma = false; } //////// if (palindroma){ printf("La parola e' palindroma"); } else printf("La parola non e' palindroma");
ps: puoi eliminare sia ctype, unistd, che string in quanto non ne fai uso nel programma

Grazie mille, gentilissimo. Per quanto riguarda la libreria ctype islower funzionerebbe? anche sleep senza time.h
Si devi includerli, anche se molto spesso vengono richiamati quando includi altri file d'intestazione o dagli ide stessi