C-Trovare quante parole e quante volte in una stringa

di il
5 risposte

C-Trovare quante parole e quante volte in una stringa

Salve, mi sono appena iscritta al portale e se possibile vorrei avere un aiuto per risolvere un esercizio.Mi sto avvicinando al mondo della programmazione, ma non ho modo di confrontarmi facilmente con qualcuno, soprattutto per la scrittura dei programmi.
Premetto che studio il C da poco più di un mese e quindi non ho fatto molta pratica...quasi solo teoria.

Comunque il problema è il seguente:
Dato un array di 10000 caratteri che contiene parole composte da solo caratteri maiuscoli e separate da soli spazi(codice ASCII 32), scrivere un programma in C che conti quante parole sono presenti nell'array(che si consideri già dato) e quante volte ciascuna parola ricorre nell'array.


Io sono arrivata a formulare solo il modo per contare le parole, usando un ciclo che scorre l'intero array ed aumenta un contatore ogni volta che incontra un elemento che non sia uno spazio seguito da un elemento che è uno spazio, perchè le parole possono essere separate da uno o più spazi.
Non so se sia corretto, però funziona...immagino che ci sia un modo migliore, per esempio basarsi sull'inizio di ogni parola e non sulla fine, come invece ho fatto io, in modo da avere quindi un riferimento(la posizione della parola nell'array) da poter usare per creare un puntatore alla parola ogni volta che se ne trova una.
Infatti avevo pensato di utilizzare dei puntatori, uno per ogni parola, che dovrei poi usare nella funzione strstr per controllare quante volte ogni parola trovata ed indicata con il suo puntatore è presente nell'array .
Naturalmente dalla seconda parola in poi, devo fare il controllo di presenza solo se diversa dalle parole già esaminate, altrimenti avrei dei doppioni.

A parte il concetto, non so come scrivere il programma.
Qualcuno può aiutarmi?
Grazie mille in ogni caso.

5 Risposte

  • Re: C-Trovare quante parole e quante volte in una stringa

    Guarda questa funzione:
    http://www.cplusplus.com/reference/clibrary/cstring/strtok/

    ti sarà utile per contare quante parole ci sono nell'array.
    Per contare quante volte compare ogni parola credo che devi studiarti le strutture.
  • Re: C-Trovare quante parole e quante volte in una stringa

    Ciao, grazie per la risposta.
    Comunque le strutture le ho studiate sul mio libro di testo...ma il mio problema è proprio applicare la teoria alla pratica.
    Ho visto la funzione che mi suggerisci, ma non conta quante parole ci sono nel testo, mi pare che le visualizzi senza alcuni caratteri che le delimitano.Nel mio caso visualizzerebbe le parole senza gli spazi.Ma poi?Non me le isola una ad una...
  • Re: C-Trovare quante parole e quante volte in una stringa

    Ad ogni ciclo potresti vedere se la parola corrente esiste nel vettore delle strutture. Se non esiste potresti inserirla e mettere la sua occorrenza ad 1, se esiste aumenti la sua occorrenza. Nello stesso momento puoi incrementare il contatore delle parole ad ogni iterazione. Quindi eseguendo un unico ciclo puoi fare le due cose. Come struttura potresti utilizzare una del tipo:
    
    struct cella
    {
        char parola[100];
        int occorrenze;
    };
    
    Come vettore di strutture potresti utilizzare uno del tipo:
    
    struct cella vettoreParole[1000]; // si suppone che non ci siano più di 1000 parole distinte.
    
    Per il confronto potresti fare una funzione dove con strcmp vedi se la parola attuale restituita da strtok compare nel vettore delle celle. se non esiste copi la parola attuale nella prima cella libera del vettore con strcpy. La prima cella libera lo trovi tenendo aggiornato un indice che inizialmente parte da zero e ogni volta che metti una parola nuova viene incrementato.
  • Re: C-Trovare quante parole e quante volte in una stringa

    Ciao a tutti. Siccome l'argomento mi interessa,mi sapresti dire come dovrei usare in questo caso strcmp per cercare le parole uguali? Grazie|
  • Re: C-Trovare quante parole e quante volte in una stringa

    Int strcmp ( const char * str1, const char * str2 );

    Compare two strings
    Compares the C string str1 to the C string str2.
    This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.

    Cosa vuoi sapere altro? E' tutto spiegato nel link sopra.
Devi accedere o registrarti per scrivere nel forum
5 risposte