Menu
Coddy logo textTech

Ripasso: contatore di frequenza delle parole

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 63 di 63.

challenge icon

Sfida

Facile

Crea un programma in C che implementi un contatore della frequenza delle parole per analizzare il testo in input. Il programma deve:

  1. Scrivere una funzione chiamata countWordOccurrences che:
    • Accetti due parametri char*: sentence e targetWord
    • Restituisca un intero che rappresenta il numero di volte in cui la parola target appare nella frase
    • Utilizzi un ciclo per elaborare la frase carattere per carattere
    • Individui i confini delle parole usando gli spazi come delimitatori
    • Estragga ogni parola dalla frase e la confronti con la parola target usando strcmp()
    • Conteggi le corrispondenze esatte (confronto con distinzione tra maiuscole e minuscole)
  2. Scrivere una funzione chiamata extractWord che:
    • Accetti una frase char*, un indice intero startIndex e un parametro parola char*
    • Restituisca un intero che rappresenta l'indice successivo alla parola estratta
    • Estragga una singola parola a partire da startIndex, fino a trovare uno spazio o un terminatore null
    • Memorizzi la parola estratta nel parametro word
    • Aggiunga un terminatore null per completare la parola estratta
  3. Scrivere una funzione chiamata analyzeText che:
    • Accetti un parametro frase char*
    • Restituisca un intero che rappresenta il numero totale di parole nella frase
    • Conteggi le parole individuando gli spazi come separatori
    • Gestisca correttamente più spazi consecutivi (considerandoli come un unico separatore)
  4. Nella funzione principale:
    • Dichiari un array di caratteri inputSentence di dimensione 200
    • Dichiari un array di caratteri searchWord di dimensione 50
    • Legga una frase dall'input (può contenere più parole separate da spazi)
    • Legga una parola target da cercare
    • Chiami la funzione analyzeText e stampi il conteggio totale delle parole esattamente in questo formato: Total words: [count]
    • Chiami la funzione countWordOccurrences e stampi il risultato esattamente in questo formato: Occurrences of '[searchWord]': [count]
    • Calcoli e stampi la frequenza della parola come percentuale con esattamente 1 cifra decimale, esattamente in questo formato: Frequency: [percentage]%
    • Determini e stampi la categoria di frequenza:
      • Se la frequenza è 0.0%: stampi Category: Not found
      • Se la frequenza è maggiore di 0.0% ma minore di 20.0%: stampi Category: Rare
      • Se la frequenza è compresa tra 20.0% e 50.0% (inclusi): stampi Category: Common
      • Se la frequenza è maggiore di 50.0%: stampi Category: Frequent

Questa sfida mette alla prova la tua padronanza della manipolazione delle stringhe, della tokenizzazione e dell'elaborazione del testo. Ti eserciterai a suddividere le frasi in singole parole, confrontare stringhe per trovare corrispondenze esatte e implementare più funzioni che collaborano per analizzare i dati testuali. Il programma illustra tecniche di elaborazione del testo usate nel mondo reale, essenziali per molte applicazioni in C.

Provalo tu

#include <stdio.h>
#include <string.h>

// TODO: Scrivi qui la tua funzione extractWord

// TODO: Scrivi qui la tua funzione countWordOccurrences

// TODO: Scrivi qui la tua funzione analyzeText

int main() {
    char inputSentence[200];
    char searchWord[50];
    
    // Leggi la frase in input
    fgets(inputSentence, sizeof(inputSentence), stdin);
    // Rimuovi il carattere di nuova riga, se presente
    inputSentence[strcspn(inputSentence, "\n")] = '\0';
    
    // Leggi la parola da cercare
    scanf("%s", searchWord);
    
    // TODO: Scrivi il tuo codice qui sotto
    // Chiama la funzione analyzeText e memorizza il numero totale di parole
    // Chiama la funzione countWordOccurrences e memorizza il numero di occorrenze
    // Calcola la percentuale di frequenza
    // Determina la categoria di frequenza
    
    // Visualizza i risultati nel formato richiesto
    // printf("Total words: %d\n", totalWords);
    // printf("Occurrences of '%s': %d\n", searchWord, occurrences);
    // printf("Frequency: %.1f%%\n", frequency);
    // printf("Category: %s\n", category);
    
    return 0;
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online