Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [C]Numero lettere

    Ciao,
    ho scritto questo programmino che conta il numero di lettere di una stringa, però non sò proprio come fare a contare quante sono le lettere simili che si stovano vicine.
    Esempio: abbcccbb ,il programma deve far apparire a schermo cheil numero massimo di lettere simili che si susseguono è 3 ossia le 3 c e non deve dire che sono 4 ossia 2b + 2 b.
    qualcuno potrebbe cortesemente spiegarmelo'
    codice:
    #include <stdio.h>
    int main()
    {
         char l=0;
         int num=0;
         printf("Inserite la parola o la frase:");
         while(l!='\n')
         {
            scanf("%c",&l);
            if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))
               {
                 num++;
               }      
            else
               {
               }                                 
            if(l==32 || l==10)
            {
               if(num)
                    {
                     printf("Il numero di lettere e\': %d",num);      
                    }
               else
                   {
                         num=0;
                   }     
            }
        }
        system("pause");                   
        return 0; 
    }
    ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  2. #2
    Ciao,
    ho modificato solo poche cose ma il problema rimane sempre lo stesso
    codice:
    #include <stdio.h>
    int main()
    {
         char l=0;
         int num=0;
         printf("Inserite la parola o la frase (premere invio per terminare):");
         while(l!='\n')
         {
            scanf("%c",&l);
            if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))//Dal 65 al 90 sono comprese tutte le lettere maiuscole, dal a 97 al 122 
                                                                // tutte le lettere minuscole il 32 è l'invio
               {
                 num++;
               }      
            else
               {
               }                                 
            if(l==32 || l==10) //il 10 è lo spazio
            {
               if(num)
                    {
                     printf("Il numero di lettere e\': %d",num);      
                    }
               else
                   {
                         num=0;
                   }     
            }
        }
        printf("\n");
        system("pause");                   
        return 0; 
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  3. #3
    potresti farlo in questo modo: int cont, int max e char lett.
    cont: conta le lettere uguali vicine e la fine facendo il confronto con il max, se invece fosse maggiore allora sarebbe max=cont.
    char lett è la lettera che ha cont maggiore...
    In fine stampi int max e char lett.

    Spero che mi sono spiegato

  4. #4
    Si ti sei spiegato perfettamente ma visto che sono ancora ai primi esercizzi e non so ancora molte cose non so bene come scriverlo.
    potresti cortesemnete farmi vedere le correzioni (sempre che tu ne abbia tempo e soprattutto voglia)
    ciao e grazie mille
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova sempre a scrivere tu il codice. Non correggere questo.

    Parti dal fatto di avere già a disposizione una stringa su cui operare ... lascia stare l'input, per ora.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Ok ci proverò domani e vi faro' vedere ciò che ho scritto in modo da capire meglio dove sbaglio. Grazie mille per l'aiuto che mi state dando
    Ciao
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  7. #7
    Ciao
    ho riscritto il codice del programma ma non funziona lo stesso, anche se non ci sono errori nella sintassi (almeno questi mi viene detto dal compilatore).
    Il problema è che non fa il paragone e di conseguenza non conta il numero di vollte in cui la lettera si ripete.
    codice:
    #include <stdio.h>
    int main()
    {
         char l=0, let=0;
         int num=0, con=0, max=0;
         printf("Inserite la parola o la frase (premere invio per terminare):");
         while(l!='\n')
         {
            scanf("%c",&l);
            if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))//Dal 65 al 90 sono comprese tutte le lettere maiuscole, dal a 97 al 122 
                                                                // tutte le lettere minuscole il 32 è l'invio
               {
                 num++;
               }      
            else
               {
               }                                 
            if(l==32 || l==10) //il 10 è lo spazio
            {
               if(num)
                    {
                     printf("\nIl numero di lettere e\': %d",num);      
                    }
               else
                   {
                         num=0;
                   }     
            }
            else
            {
                if(let==l)
                {
                    con++;
                }
                else
                {
                    let==l; //La lettera di paragone diventa la nuova lettera
                    con=0;
                }
            }             
        }
        printf("\n\n");
        printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", let,con);
        printf("\n\n");
        system("pause");                   
        return 0; 
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  8. #8
    Per forza non funziona, non stai usando max... Quando finisce una serie consecutiva della stessa lettera, prima di azzerare con e aggiornare let devi confrontare il numero di occorrenze contate con max, e se è superiore al valore attuale, sostituire max con con:
    codice:
         char l=0, let=0, maxLet;
    ...
                else
                {
                    if(con>=max)
                    {
                        max=con;
                        maxLet=let;
                    }
                    let=l; //La lettera di paragone diventa la nuova lettera
                    con=0;
                }
            }             
        }
        printf("\n\n");
        printf("La lettera che si ripete piu' volte e' la %c e si ripete %d volte", maxLet,max);
        printf("\n\n");
    Tra l'altro, perché scrivi direttamente i numeri dei caratteri? Usa più semplicemente i char literal:
    codice:
            if((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' '))
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Ciao,
    ho cercato di fare cio che mi avevi scritto, ma siccome sono ancora molto scarso in materia, mi sa proprio di aver sbagliato ancora qualcosa, perchè nell'ultim printf non mi appare nessun valore e in più nella printf che dice \nIl numero di lettere e': %d",num mi appaiono dopo ogni ripetizione del ciclo la somma di tutte le lettere e non quelle che formano ogni singola parola.
    codice:
    #include <stdio.h>
    int main()
    {
         char l=0, let=0;
         int num=0, con=0, max=0, maxLet;
         printf("Inserite la parola o la frase (premere invio per terminare):");
         while(l!='\n')
         {
            scanf("%c",&l);
            if((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' '))//char literal
               {
                 num++;
               }      
            else
               {
               }                                 
            if(l==' ' || l==10) //il 10 è lo spazio
            {
               if(num)
                    {
                     printf("\nIl numero di lettere e\': %d",num);      
                    }
               else
                   {
                         num=0;
                   }     
            }
            else
            {
                if(con>=max)
                {
                     max=con;
                     maxLet=let;
                }
                else
                {
                    let==l; //La lettera di paragone diventa la nuova lettera
                    con=0;
                }
            }             
        }
        printf("\n\n");
        printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", maxLet,max);
        printf("\n\n");
        system("pause");                   
        return 0; 
    }
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

  10. #10
    Ciao,
    ho messo il do-while come controllo dell'input (però risulta sbagliato) e in più ho tolto le parentesi graffe non cesessarie (in modo tale da essere più facile da leggere):
    codice:
    #include <stdio.h>
    int main()
    {
         char l=0, let=0;
         int num=0, con=0, max=0, maxLet, i=0;
         while(l!='\n')
         {
            do
             {
              printf("Inserite la parola o la frase (premere invio per terminare):");
              scanf("%c",&l);
              i++;
             }        
            while((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' ')); //char literal, il ' ' è l'invio
            num++;
            if(l==' ' || l==10) //il 10 è lo spazio
            {
               if(num)
                     printf("\nIl numero di lettere e\': %d",num);      
               else
                   num=0;
            }
            else
            {
                if(con>=max)
                {
                     max=con;
                     maxLet=let;
                }
                else
                {
                    let==l; //La lettera di paragone diventa la nuova lettera
                    con=0;
                }
            }               
         }
        printf("\n\n");
        printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", maxLet,max);
        printf("\n\n");
        system("pause");                   
        return 0; 
    }
    Come posso fare per cercare di risolvere almeno uno di questi problemi.
    Ciao e grazie
    Your time is limited, so don't waste it living someone else's life. Stay hungry, stay foolish. (Steve Jobs)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.