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

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Dernière intervention
6 mars 2015
- - Dernière réponse : cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
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 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Dernière intervention
19 novembre 2018
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[

Merci cptpingu 3

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

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cptpingu
Messages postés
90
Date d'inscription
samedi 5 juin 2010
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.