Fréquence de tous les termes dans un dossier [Résolu]

Signaler
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
bonjour,
pour avoir la fréquence de tous les termes dans un dossier, j'ai écrit le code ci-dessous:
si par exemple mon dossier "test" contient 3 fichiers:

file1: a b b c a
file2:g f a d
file3:d d a c

le résultat voulu est:

la frequence du mot a est 4
la frequence du mot b est 2
la frequence du mot c est 2
la frequence du mot d est 3
la frequence du mot f est 1
la frequence du mot g est 1

alors que le résultat de mon code est:
la frequence du mot a est 2
la frequence du mot b est 2
la frequence du mot c est 1
la frequence du mot a est 1
la frequence du mot d est 1
la frequence du mot f est 1
la frequence du mot g est 1
la frequence du mot a est 1
la frequence du mot c est 1
la frequence du mot d est 2


#include <dirent.h>
#include <string>
#include <fstream>
#include 
#include <map>
#include <vector>
 bool isValid(const std::string& path)
{
  return !path.empty() && path != "." && path != "..";
}

void fillMap(std::map<std::string, int>& map, const std::string& filename)
{
  std::ifstream entree(filename.c_str());
  std::string s;
  while (entree >> s)
++map[s];
}


int main()
{
  static const std::string folder = "test";

   DIR* rep = opendir(folder.c_str());
  if (rep)
  {  struct dirent* lecture;

  while ((lecture = readdir(rep)))
{
  if (!isValid(lecture->d_name))
 continue;

  std::map<std::string, int> map;

  fillMap (map,folder + "/" + lecture->d_name);

  typedef std::map<std::string, int>::const_iterator iter;

  for (iter it = map.begin(); it != map.end(); ++it)
  std::cout << "La frequence du mot " << it->first << " est  " << it->second << std::endl;

 }
closedir(rep);

  }
 system("pause");
return (0);
}

j'espère bien avoir votre aide, et merci.

1 réponse

Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

bonjour,
En fait ma faute était dans l'affichage, donc j'ai juste déplacer les 2 instructions:
typedef std::map<std::string, int>::const_iterator iter;

  for (iter it = map.begin(); it != map.end(); ++it)
  std::cout << "La frequence du mot " << it->first << " est  " << it->second << std::endl;



après la fermeture du rep, et j'ai obtenu le bon résultat