Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] funzione che conta parole di una stringa

    ragazzi come anticipato in una discussione precedente apro un nuovo thread per un nuovo esercizio:
    scrivere il codice di una funzione che permetta di contare il numero di parole contenute in una stringa di caratteri. considerate come carattere di una parola solo i caratteri (non accentati) compresi fra la 'a' e la 'z'.

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Come sempre, postare del codice prima di tutto.

    Puoi utilizzare una matrice, o anche una struttura.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Io non ho capito il testo dell'esercizio.

    1) la stringa di input è costituita unicamente da caratteri compresi 'a' e la 'z' e da spazi
    oppure
    2) la string di input è costituita da qualunque carattere ma le parole da contare sono solo quelle costituite
    da caratteri compresi 'a' e la 'z'.

    Quale delle 2?

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Considerando l'ipotesi 2 , le parole sono formate da lettere minuscole TUTTI gli altri caratteri
    sono separatori ",;!: ABCDE"

    codice:
    
    int contaparole(char *str)
    {
        int i,c=0;
        char parola=0;//variabile vero falso
        for(i=0;i<=strlen(str);i++)
         {
             if(str[i]>='a'&& str[i]<='z')//sono su una parola
                 parola=1;
             else if(str[i]<'a'|| str[i]>'z')//sono fuori dalla parola
             {
                  if(parola==1)//sono sul primo carattere dopo la parola
                  {
                       c++;
                       parola=0;
                     
                   }
                 
               }
             
             }
        
        
        return c;
        
        }
    Tecnologia

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    In effetti rileggendolo non è molto chiaro... io l'avevo inteso diversamente ad una prima lettura.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    @torn24 mi sembra una ottima implementazione.
    Mi permetto di formattare meglio il codice e usare nomi di variabile più espliciti.
    Ho sempliificato anche l'else if (credo senza effetti collaterali).
    Ho tolto il <= nel for che non mi piaceva (immagina di riscriverlo in Java)
    e ho messo il conteggio dell'ultima parola al fondo.

    codice:
    int contaparole(char *str)
    {
        int i, parole = 0;
        char inizioparola = 0;
    
        for (i = 0; i < strlen(str); i++) {
            if (str[i] >= 'a' && str[i] <= 'z') // sono su una parola
                inizioparola = 1;
            else if (inizioparola) { // sono sul primo carattere dopo la parola
                parole++;
                inizioparola = 0;
            }
        }
        // conteggio l'ultima parola
        if (inizioparola)
            parole++;
    
        return parole;
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Come regola generale, è meglio non mettere la strlen nella for perché sarà (inutilmente) valutata ad ogni giro.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    @oregon giusto, troppo java ultimamente.
    Si sostituisca con:
    codice:
    for (i = 0; str[i] != '\0'; i++)

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da c0der
    @oregon giusto, troppo java ultimamente.
    Si sostituisca con:
    codice:
    for (i = 0; str[i] != '\0'; i++)
    Ok ... ancora meglio

    for (i = 0; str[i]; i++)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    grazie mille ragazzi

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.