cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDernière intervention 6 mars 2015
-
28 août 2010 à 11:36
cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDernière intervention 6 mars 2015
-
31 août 2010 à 10:54
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);
}
cs_mervat
Messages postés90Date d'inscriptionsamedi 5 juin 2010StatutMembreDernière intervention 6 mars 2015 31 août 2010 à 10:54
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