thebestgirl | Bonjour, j'ai un dossier de fichiers textes et je voulais les parcourir mot à mot pour savoir le nombre de fichiers où appartient chaque terme. le résultat de ce code est erroné, la faute est dans la fonction nbfiles, j'ai pas su le calculer, j'espère que vous pouvez m'aider à savoir comment le calculer.
Code :
- #include <dirent.h>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <map>
- 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];
- }
- bool exists(const std::string& filename, const std::string& pattern)
- { std::ifstream entree(filename.c_str());
- std::string s;
- while (entree >> s)
- if (s == pattern)
- return true;
- return false;
- }
- void nbfiles(const std::string& filename)
- { std::map<std::string, int> map;
- fillMap(map, filename);
- int nbFile = 0;
- typedef std::map<std::string, int>::const_iterator iter;
- for (iter it = map.begin(); it != map.end(); ++it)
- if (exists(filename, it->first))
- {++nbFile;
- break;
- }
- for (iter it = map.begin(); it != map.end(); ++it)
- std::cout << "Le nombre de fichier contenant le terme " << it->first << " est " << nbFile << std::endl<< std::endl;
- }
- int main()
- { static const std::string folder = "in";
- DIR* rep = opendir(folder.c_str());
- if (rep)
- { struct dirent* lecture;
- while ((lecture = readdir(rep)))
- {
- if (!isValid(lecture->d_name))
- continue;
- nbfiles(folder + "/" + lecture->d_name);
- std::cout << std::endl;
- }
- closedir(rep);
- }
- system ("pause" );
- return 0;
- }
|
|