Comteur de mot repeter

cs_GaGa Messages postés 8 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 décembre 2006 - 17 déc. 2006 à 16:11
cs_GaGa Messages postés 8 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 décembre 2006 - 18 déc. 2006 à 01:18
Salut,


dsl de vous deranger pour si peut ;-) mais suite a un pari stupide je
suis a la recherche d'un petit prog qui permete de compter combien de
fois chaque mot aparait dans un document texte.

Je l'acorde ce n'est pas trop utile mais cela me depanerai bien.


Enfin j'ai cherché un peut partout et rien trouver si vous avec un lient qui pourais maider merci d'avance !


A+

GaGa

7 réponses

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
17 déc. 2006 à 18:28
slt
je peut te donner l'algorithme de ton code:
tu creer un tableau de type string et un de type int (le string le mot ; le int le nombre de fois qu'il est present)
tu ouvre ton fichier
tu le "scan"
a chaque fois que tu rencontre un mot 
   tu test si il est deja present dans le tableau defini plus haut ,si oui
      tu increment de 1 son compteur
   si il n'est pas repertorier
      tu l'ajoute et tu increment de 1 son compeur
fin

j'espere que tu a compris cet algo
+
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
17 déc. 2006 à 19:57
Un tableau?
Il vaudrait mieu faire une liste chainé sinon, on risque de ne pas avoir asser de mémoire pour le nombre de mot:

struct WORDN
{
    struct WORDN *next; // Prochain mot de la liste
    char name[32]; // La longeur maximal d'un mot est donc de 31 caractères
    DWORD i; // Le nombre de mot présent
};

C++ (@++)<!--
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
17 déc. 2006 à 20:03
Oula les algos tout pas beaux et tout long ^^
(fin .. long si tu tries pas ton tableau ..)
moi je ferais un dictionnaire  ...

Louis
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
17 déc. 2006 à 20:37
voila un ptit exemple de code ... avec dictionnaire

#include

class n_dico
{
    public:
    char lettre;
    int nb_occurence;
    n_dico *  suiv[256];
    n_dico(char l)
    {
        lettre = l;
        nb_occurence = 0;
        for(int i=0;i<256;i++)
            suiv[i] = NULL;
    }
    void inc()
    {
        nb_occurence++;
    }
}base(' ');

char * ajoute(const char *mot)
{
    char *let = (char*)mot;
    n_dico * cur = &base;
    do
    {
        char c = *let;
        if(c<='Z'&&c>='A')
            c = c - ('A' + 'a');
        if(cur->suiv[*let]==NULL)
            cur->suiv[*let] = new n_dico(*let);
        cur = cur->suiv[*let];
        let++;
    }
    while((*let<='z'&&*let>='a')||(*let<='Z'&&*let>='A'));
    cur->inc();
    return let;
}

int nb_occ(char *mot,n_dico *cur)
{
    if(cur->suiv[mot[0]])
        return nb_occ(&mot[1],cur->suiv[mot[0]]);
    return cur->nb_occurence;
}

void parse_texte(char *txt)
{
    do
    {
        if((*txt<='z'&&*txt>='a')||(*txt<='Z'&&*txt>='A'))
            txt = ajoute(txt);
        txt++;
    }
    while(*(txt-1)!='\0');
}

void affiche(n_dico *cur,char base[],int id)
{
    base[id] = cur->lettre;
    base[id+1] = '\0';
    if(cur->nb_occurence)
        printf("%s %d\r\n",base,cur->nb_occurence);
    for(int i=0;i<256;i++)
        if(cur->suiv[i])
            affiche(cur->suiv[i],base,id+1);
}

int main()
{
    parse_texte("aimer ce n'est pas se regarder l'un l'autre, c'est regarder ensemble, dans la même direction!");
    char mess[200];
    affiche(&base,mess,0);
    return 0;
}

Louis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 déc. 2006 à 20:58
Plus simple à mon avis: une map<string, int>

map<string, int> m;
while(pas fini) {
  mot = lireMot();
  m[mot]++;
}
 

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
17 déc. 2006 à 21:27
.. je dois trop aimer l'algo pour aprecier mais c'est bref ^^

pourquoi faire simple quand on peut faire compliquer?

Louis ;..
0
cs_GaGa Messages postés 8 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 18 décembre 2006
18 déc. 2006 à 01:18
Whaw merci a tous pour les reponse rapide ! Pour lalgo c'est sympa mais javais dejas une ou deux ptite idées mon probleme c'est que je n'ai jamais utiliser le C pour traiter un fichier texte (ou autre dailleur) mais le bout de code a l'air bien sympa je my penche un peut et je vous tiend au courant

++

GaGa
0
Rejoignez-nous