Récap : Compteur de fréquence des mots
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 63 sur 63.
Défi
FacileCréez un programme C qui implémente un compteur de fréquence de mots pour analyser une saisie de texte. Votre programme doit :
- Écrire une fonction nommée
countWordOccurrencesqui :- Prend deux paramètres
char*:sentenceettargetWord - Retourne un entier représentant le nombre de fois que le mot cible apparaît dans la phrase
- Utilise une boucle pour traiter la phrase caractère par caractère
- Identifie les limites des mots en utilisant les espaces comme délimiteurs
- Extrait chaque mot de la phrase et le compare avec le mot cible en utilisant
strcmp() - Compte les correspondances exactes (comparaison sensible à la casse)
- Prend deux paramètres
- Écrire une fonction nommée
extractWordqui :- Prend une phrase
char*, un entierstartIndex, et un paramètrechar*word - Retourne un entier représentant l'index après le mot extrait
- Extrait un seul mot en commençant par
startIndexjusqu'à ce qu'un espace ou un terminateur nul soit trouvé - Stocke le mot extrait dans le paramètre
word - Ajoute un terminateur nul pour compléter le mot extrait
- Prend une phrase
- Écrire une fonction nommée
analyzeTextqui :- Prend un paramètre
char*sentence - Retourne un entier représentant le nombre total de mots dans la phrase
- Compte les mots en identifiant les espaces comme séparateurs
- Gère correctement les espaces consécutifs multiples (les traite comme des séparateurs uniques)
- Prend un paramètre
- Dans la fonction main :
- Déclarer un tableau de caractères
inputSentencede taille 200 - Déclarer un tableau de caractères
searchWordde taille 50 - Lire une phrase à partir de l'entrée (peut contenir plusieurs mots séparés par des espaces)
- Lire un mot cible à rechercher
- Appeler la fonction
analyzeTextet afficher le nombre total de mots dans ce format exact :Total words: [count] - Appeler la fonction
countWordOccurrenceset afficher le résultat dans ce format exact :Occurrences of '[searchWord]': [count] - Calculer et afficher la fréquence du mot sous forme de pourcentage avec exactement 1 décimale dans ce format exact :
Frequency: [percentage]% - Déterminer et afficher la catégorie de fréquence :
- Si la fréquence est 0.0% : afficher
Category: Not found - Si la fréquence est supérieure à 0.0% mais inférieure à 20.0% : afficher
Category: Rare - Si la fréquence est comprise entre 20.0% et 50.0% (inclus) : afficher
Category: Common - Si la fréquence est supérieure à 50.0% : afficher
Category: Frequent
- Si la fréquence est 0.0% : afficher
- Déclarer un tableau de caractères
Ce défi teste votre maîtrise de la manipulation de chaînes de caractères, de la tokenisation et du traitement de texte. Vous vous exercerez à décomposer des phrases en mots individuels, à comparer des chaînes pour des correspondances exactes et à implémenter plusieurs fonctions qui travaillent ensemble pour analyser des données textuelles. Le programme démontre des techniques de traitement de texte du monde réel essentielles pour de nombreuses applications en C.
Essayez vous-même
#include <stdio.h>
#include <string.h>
// TODO : Écrivez votre fonction extractWord ici
// TODO : Écrivez votre fonction countWordOccurrences ici
// TODO : Écrivez votre fonction analyzeText ici
int main() {
char inputSentence[200];
char searchWord[50];
// Lire la phrase d'entrée
fgets(inputSentence, sizeof(inputSentence), stdin);
// Supprimer le caractère de nouvelle ligne s'il est présent
inputSentence[strcspn(inputSentence, "\n")] = '\0';
// Lire le mot à rechercher
scanf("%s", searchWord);
// TODO : Écrivez votre code ci-dessous
// Appeler la fonction analyzeText et stocker le nombre total de mots
// Appeler la fonction countWordOccurrences et stocker les occurrences
// Calculer le pourcentage de fréquence
// Déterminer la catégorie de fréquence
// Afficher les résultats dans le format requis
// 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;
}Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction8Structures et Pointeurs
Pointeurs vers des structuresL'opérateur flèche (->)Passage de structures par valeurPassage de pointeurs de structuresAllocation dynamique de structuresRécap : Modifier une structure - Ptr11Défis de révision finale
Récap : Concaténation dynamique de chaînesRécap : Tableau de structsRécap : Compteur de fréquence des mots3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes