Utilizzo Funzione Isdigit

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Utilizzo Funzione Isdigit

    26/10/2023 - oregon ha scritto:


    In via del tutto eccezionale, propongo un codice (sulla base di quello di Franco ma rivisto e corretto per non usare malloc/free, per ottimizzarlo e per correggere il fatto che si parla di cifre e non numeri) che possa aiutare Antonio.

    Altre modifiche Antonio le potrà apportare da solo tenendo conto di come è stato scritto il codice.

    int main()
    {
       char stringa[DIM];
       char cifre_concatenate[DIM];
       char consonanti_concatenate[DIM];
       int lunghezza = 0;
       int numero_vocali = 0;
       int numero_consonanti = 0;
       int numero_cifre = 0;
       
       printf("Inserire una stringa: ");
       scanf("%50[^\n]", stringa);
       lunghezza = strlen(stringa);
       
       for (int i = 0; stringa[i]; i++)
       {
           char c = tolower(stringa[i]);
           if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
               numero_vocali++;
           else
               if (isalpha(c))
                   consonanti_concatenate[numero_consonanti++] = stringa[i];
           
           if (isdigit(c))
               cifre_concatenate[numero_cifre++] = c;
       }
       
       cifre_concatenate[numero_cifre] = '\0';
       consonanti_concatenate[numero_consonanti] = '\0';
       
       printf("\nLa lunghezza e': %d\n", lunghezza);
       printf("Hai inserito: %d vocali\n", numero_vocali);
       printf("Hai inserito: %d consonanti -> %s\n", numero_consonanti, consonanti_concatenate);
       printf("Hai inserito: %d cifre -> %s\n", numero_cifre, cifre_concatenate);
       
       return 0;
    }
    

    Grazie per la cortesia e la disponibilità 

  • Re: Utilizzo Funzione Isdigit

    25/10/2023 - oregon ha scritto:


    Antonio… stai contando cifre e lettere, a cosa servono contatori di vocali e consonanti??

    Ho corretto il codice credo che dovrebbe essere a posto:

    # include <stdio.h>
    # include <string.h>
    #include <ctype.h>
    #include <stddef.h>
    # define Dimensione 50
    //Programma che suddivide una strinaga mista lettere e numeri e li separa
    //Indicando la composizione delle due stringhe: lunghezza
     int main (void)
    {
       //Uso della funzione Isdigit che rstituisce un valore diverso da zero !=0 se digito una cifra
       int LunghezzaStringa=0,LunghezzaNumero=0,Cifre=0,Lettere=0,LungNumeroStringa=0;
        char Stringa[Dimensione];
         char Numero[Dimensione],NumeroStringa[Dimensione];
       printf("%s","Inserire una stringa");
        scanf(" %s",  Stringa );
         LunghezzaStringa=strlen(Stringa);
          printf("%s %d \n","La lunghezza e': ",LunghezzaStringa);
    
          //verifico se ho inserito un numero
          for(size_t  i=0;Stringa[i]!='\0';i++)
          {
            if(isdigit(Stringa[i])!=0)
            {
    
              Cifre++;//Incremento il numero il numero di cifre  inserito
                Numero[LunghezzaNumero++]=Stringa[i];//Inserisco Nella variabile Numero La stringa iesima partendo da 0 e poi incremento
                 Numero[LunghezzaNumero]='\0';//Inserisco il carattere terminatore nella nuova posizione
    
            }
             else
            {
    
              Lettere++;//Incremento il numero di Lettere
                NumeroStringa[LungNumeroStringa++]=Stringa[i];//Inserisco Nella variabile Numero La stringa iesima partendo da 0 e poi incremento
                 NumeroStringa[LungNumeroStringa]='\0';//Inserisco il carattere terminatore nella nuova posizione
            }
          }//Exit for
    
    //Verifico  con un messaggio se ho inserito una o più cifre
    if(Cifre==1) printf("%s \n","Hai inserito una Cifra");
     else if (Cifre>1) printf("%s %d %s \n","Hai inserito:",Cifre,"Cifre");
    //****************************************************************************
    
    
    //Verifico  con un messaggio se ho inserito una o più lettere
    if(Lettere==1) printf("%s \n ","Hai inserito una Lettera");
      else if (Lettere>1) printf("%s %d %s \n","Hai inserito:",Lettere,"Lettere");
    //******************************************************************************
    
    // Verifico come è composto il numero nello specifico Più di un numero,1 numero oppure  0
    if(LunghezzaNumero>1)printf("%s %s %s %d %s \n","Il Numero Inserito",Numero,"Ha",LunghezzaNumero,"Cifre");
     else if(LunghezzaNumero==1)printf("%s %s %s %d %s \n","Il Numero Inserito",Numero,"Ha",LunghezzaNumero,"Cifra");
       else if (LunghezzaNumero==0) printf("%s \n","Non Hai inserito Alcun numero");
    
       //Verifico come è composta la stringa nello specifico Più di un Carattere,1 Carattere oppure  0
    if(LungNumeroStringa>1)printf("%s %s %s %d %s \n","La stringa Inserita",NumeroStringa,"Ha",LungNumeroStringa,"Lettere");
     else if(LungNumeroStringa==1)printf("%s %s %s %d %s \n","La stringa Inserita",NumeroStringa,"Ha",LungNumeroStringa,"Lettera");
      else printf("%s","Non Hai inserito Alcuna Lettera");
    }
    
  • Re: Utilizzo Funzione Isdigit

    Questa

    printf("%s %d \n","La lunghezza e': ",LunghezzaStringa);

    si scrive così

    printf("La lunghezza e': %d\n", LunghezzaStringa);

    e vale per tutte le altre volte che hai usato la printf, alcune molto contorte

    printf("%s %s %s %d %s \n","Il Numero Inserito",Numero,"Ha",LunghezzaNumero,"Cifre");

    che dovrebbe essere

    printf("Il numero inserito %s ha %d cifre\n", Numero, LunghezzaNumero);

    Queste

    Numero[LunghezzaNumero]='\0';
    
    NumeroStringa[LungNumeroStringa]='\0'

    non devono stare all'interno del ciclo. Non hai visto il codice che ti ho dato?

    E dovresti usare anche la funzione isalpha se non è un numero non è detto che sia una lettera

  • Re: Utilizzo Funzione Isdigit

    26/10/2023 - oregon ha scritto:


    Questa

    printf("%s %d \n","La lunghezza e': ",LunghezzaStringa);

    si scrive così

    printf("La lunghezza e': %d\n", LunghezzaStringa);

    e vale per tutte le altre volte che hai usato la printf, alcune molto contorte

    printf("%s %s %s %d %s \n","Il Numero Inserito",Numero,"Ha",LunghezzaNumero,"Cifre");

    che dovrebbe essere

    printf("Il numero inserito %s ha %d cifre\n", Numero, LunghezzaNumero);

    Queste

    Numero[LunghezzaNumero]='\0';
    
    NumeroStringa[LungNumeroStringa]='\0'

    non devono stare all'interno del ciclo. Non hai visto il codice che ti ho dato?

    E dovresti usare anche la funzione isalpha se non è un numero non è detto che sia una lettera

    Oregon mi spieghi cosa non va nel mio modo di scrivere così le printf? Correggo quanto da te menzionato. Grazie 

  • Re: Utilizzo Funzione Isdigit

    La sintassi della funzione printf prevede di scrivere tra virgolette la stringa da mandare in output e poi i vari elementi aggiuntivi quali valori numerici o variabili. Ecco un link a caso da cui attingere le informazioni:

    http://www.science.unitn.it/~fiorella/guidac/guidac067.html

    mentre l'indice della guida per tutto il resto lo trovi qui:

    http://www.science.unitn.it/~fiorella/guidac/indexc.html

  • Re: Utilizzo Funzione Isdigit

    Scusa Antonio,se vuoi programmare non devi solo chiedere al forum ma leggere e studiare la documentazione.

    Cerca e studia la printf

Devi accedere o registrarti per scrivere nel forum
20 risposte