Nombre d'occurence des termes d'un fichier texte [Résolu]

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- - Dernière réponse : cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
- 2 juil. 2010 à 14:14
bonjour,
ce programme permet de déterminer le nombre d'occurence de tous les termes dans un texte, j'ai créé une liste contenant les termes du texte, et puis la fonction compare parcourt le texte en parallèle avec la liste pour compter le nombre d'occurence de chaque mot du texte.

#include 
#include <fstream>
#include <string>
using std::ifstream;
using std::string;

struct Page
{
  string val;
  Page* suivant;
};


Page* creerliste()
{
  ifstream entree ("in.txt");
  string i;
  Page* premier;
  Page* precedent;
  Page* nouveau;

  premier = new Page;
  entree >> premier->val;
  precedent = premier;
  while (entree >> i)
  {
nouveau = new Page;
precedent->suivant = nouveau;
precedent = nouveau;
nouveau->val = i;
  }
  precedent->suivant = 0;

  return premier;
}

void compare(Page* debut)
{
  int i = 0;
  ifstream ifs("in.txt") ;
  string s;
  Page* head = debut;

  while (ifs >> s)
  {
     debut = head;
     while (debut != 0)
{
  if (s == debut->val)
     i=i+1;
  debut = debut->suivant;
 }

     std::cout << "le nombre d'occurence du mot " << s << " est " << i << std::endl;
     i=0;
  }
}

int main()
{
  Page* premier = creerliste();
  compare(premier);
  system ("pause");
  return 0;
}

l'entrée est:
Cest vendredi le 2 juillet 2010
Vendredi 2 7 2010


le résultat de ce code est:
le nombre d'occurence du mot Cest est 1
le nombre d'occurence du mot vendredi est 1
le nombre d'occurence du mot le est 1
le nombre d'occurence du mot 2 est 2
le nombre d'occurence du mot juillet est 1
le nombre d'occurence du mot 2010 est 2
le nombre d'occurence du mot Vendredi est 1
le nombre d'occurence du mot 2 est 2
le nombre d'occurence du mot 7 est 1
le nombre d'occurence du mot 2010 est 2

j'ai alors un problème dans l'affichage comme par exemple le nombre d'occurence du mot 2 est 2 se répète, une redondance
pourrais je avoir vore aide pour résoudre ce problème.
et merci.
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3821
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 août 2019
85
3
Merci
Utilise une std::map !
Cette collection te permet d'associer deux type ensembles. Par exemple un std::string avec un entier.
C'est comme si on créait des colonnes, et que l'on associait un mot avec un entier.

Ex: map["pouet"] = 3;
Si on fait std::cout << map["pouet"];, on aura donc 3.
Si map["pouet"] n'existe pas, il est crée automatiquement.
Donc lorsque l'on fait ++map["pouet"], "pouet" sera crée et l'on aura 1 d'associé avec.

Juste en faisant:
while (ifs >> s)
++map[s];
Je peux associer tous les mots avec leur nombre d'occurence.

Ex:
#include 
#include <fstream>
#include <map>

int main()
{
  std::ifstream ifs("in.txt") ;
  std::string s;
  std::map<std::string, int> map;

  while (ifs >> s)
    ++map[s];

  typedef std::map<std::string, int>::const_iterator iter;
  for (iter it = map.begin(); it != map.end(); ++it)
    std::cout << "le nombre d'occurence du mot " << it->first << " est " << it->second << std::endl;

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
[color=green]Merci d'utiliser [i]Réponse acceptée[

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cptpingu
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
0
Merci
c'est vraiment extra-ordinaire ce map,je ne l'ai jamais utilisé,
je vous remercie infiniment, tout d'abord pour le code et surtout pour l'explication de ce code et de l'utilité du map.
Commenter la réponse de cs_mervat