Trier et compter les mots d'un fichier      

Trier et compter les mots d'un fichier

Notions utilisées

Cahier des charges

Il s'agit de lire un fichier contenant du texte, de trier les mots par ordre lexicographique croissant, puis d'afficher la liste triée des mots du texte en indiquant pour chacun d'entre eux leur nombre d'occurrences. Plus précisément, le programme :

Indications

Si on écrit :
FILE *fichier = stdin;
fichier est l'entrée standard (le clavier).

La fonction strtok déclarée dans string.h permet de découper une chaîne de caractères en "morceaux" en se basant sur des séparateurs. Avant de commencer, il est conseillé de consulter, et éventuellement d'essayer, le petit programme d'essai ci-joint qui lit une ligne envoyée au clavier et la découpe avec la fonction strtok.
La fonction strcmp prototypée dans string.h compare des chaînes de caractères selon l'ordre lexicographique.
La fonction strlen prototypée dans string.h permet de connaître la longueur d'une chaîne de caractères.

Spécifications

On utilise la déclaration suivante :
typedef struct compteMot
{
  char * mot;
  int nbOcc;
}CompteMot;
pour coder : On utilise un tableau dynamique pour mettre et ranger les "CompteMot(s)". On choisit au départ une certaine taille (50 par exemple). On prévoit le cas où le tableau de structures CompteMot est plein alors qu'il y a encore des mots à ajouter ; dans ce cas, on utilise la fonction realloc prototypée dans stdlib.h pour agrandir le tableau.
On lit le texte ligne par ligne avec la fonction fgets. Pour stocker une à une ces lignes, on utilise un même tableau statique d'une longueur bien surévaluée (200 par exemple).

Exemple d'exécution

Supposons que le programme ait été lancé avec un seul argument indiquant le nom d'un fichier contenant le texte suivant :
Bonjour, comment vas-tu ? Très bien. Et toi, comment vas-tu ?

alors, on pourrait avoir à l'exécution :
Bonjour : 1 fois
Et : 1 fois
Très : 1 fois
bien : 1 fois
comment : 2 fois
toi : 1 fois
tu : 2 fois
vas : 2 fois

Corrigé

Voir le corrigé.
Irène Charon
Last modified: Mon Sep 13 19:08:51 MET DST 1999