Nombre d'occurence des termes d'un fichier texte

Résolu
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 2 juil. 2010 à 12:37
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.
A voir également:

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
2 juil. 2010 à 12:52
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[
3
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
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.
0
Rejoignez-nous