2009/CaoCourseTme2: count.c

File count.c, 2.4 KB (added by franck, 14 years ago)
Line 
1#include <stdio.h>
2#include <string.h>
3#include "dico.h"
4#include "count.h"
5
6
7/*********************************************************************
8  Cette fonction retourne successivement tous les mots d'un
9  fichier. Un mot est une séquence de caractères qui se termine
10  par un espace, une tabulation ou un retour chariot.
11  Paramètre :
12      infile : pointe sur le fichier déjà ouvert
13  Retour :
14      La fonction rend un pointeur sur la chaine représentant
15      le mot et rend également dans *numero le numéro de ligne
16      où se trouve le mot
17*********************************************************************/
18static char *token(FILE * infile, int *numero)
19{
20    static char buffer[1024];
21    static char *current_token = NULL;
22    static unsigned numline = 1;
23    const char *delim = " \t\n";
24    do
25    {
26        if (current_token == NULL)
27        {
28            if (fgets (buffer, sizeof (buffer), infile) == NULL)
29                return NULL;
30            current_token = strtok (buffer, delim);
31            numline++;
32        }
33        else
34            current_token = strtok (NULL, delim);
35    }
36    while (current_token == NULL);
37    *numero = numline;
38    return current_token;
39}
40
41/***********************************************************************
42  cette fonction affiche les résultats du comptage
43  accumulés dan le dictionnaire root             
44************************************************************************/
45static void result_count(dico_root_t *root)
46{
47    dico_iterator_t *iter = dico_iterator(root);
48    dico_item_t *item;
49
50    for (item = dico_first(iter) ; item ; item = dico_next(iter)) {
51             printf ("%20s : %d occurences\n", item->KEY, item->COUNT);
52    }
53}
54
55/************************************************************************
56  La fonction count compte le nombre de mots total d'un fichier
57  ainsi que le nombre d'occurences de chaque mots.
58  parametre:
59      infile : pointe sur le fichier déjà ouvert
60  retour:
61      La fonction ne renvoie rien.
62      Elle affiche le resultat de son comptage
63************************************************************************/
64void count (FILE * infile)
65{
66char        *tok;
67int         numero;
68dico_item_t *item;
69int         nb_mots = 0;
70dico_root_t *dico = dico_create(100);
71
72while ((tok = token(infile, &numero))) {
73        item = dico_get (dico, tok);
74    item->COUNT++;
75    nb_mots++;
76}
77
78printf ("le fichier contient %d mots \n\n", nb_mots);
79result_count(dico);
80}