[C] Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

Messaggioda MrRobot96 » 22/05/2017, 17:46

Salve. Ho un problema con un esercizio.

b]Traccia[/b]: 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.

Codice:
#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
MrRobot96
Starting Member
Starting Member
 
Messaggio: 1 di 19
Iscritto il: 22/05/2017, 17:35

Re: [C] Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

Messaggioda Giux » 22/05/2017, 22:05

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)..

Codice:
   ///////////// 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 ;)
La matematica è la regina delle scienze e la teoria dei numeri è la regina della matematica.
(Carl Friedrich Gauss)
Avatar utente
Giux
Average Member
Average Member
 
Messaggio: 198 di 517
Iscritto il: 01/10/2012, 09:49

Re: [C] Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

Messaggioda MrRobot96 » 23/05/2017, 19:42

Grazie mille, gentilissimo. Per quanto riguarda la libreria ctype islower funzionerebbe? anche sleep senza time.h
MrRobot96
Starting Member
Starting Member
 
Messaggio: 2 di 19
Iscritto il: 22/05/2017, 17:35

Re: [C] Esercizio su conversione di caratteri maiuscoli in minuscoli e parole palindrome

Messaggioda Giux » 24/05/2017, 18:53

Si devi includerli, anche se molto spesso vengono richiamati quando includi altri file d'intestazione o dagli ide stessi
La matematica è la regina delle scienze e la teoria dei numeri è la regina della matematica.
(Carl Friedrich Gauss)
Avatar utente
Giux
Average Member
Average Member
 
Messaggio: 199 di 517
Iscritto il: 01/10/2012, 09:49


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite