Réponse acceptée !
Plusieurs erreurs:
- La première liste contient déjà ce que tu veux, inutile de remettre une copie dans un autre vecteur. Qui plus est, tu remets des doublons dedans, car la première liste n'est pas effacé. Autant ne gardé qu'une liste.
- Tu as oublié de vérifier que le fichier en cours n'était pas "." ou ".." (Sous Linux, il faut le faire sinon ça plante).
- Vérifie bien la réussite de l'ouverture de ton fichier.
Erreurs de style:
- Inutile de déclarer 2 iter. Un seul suffit, tu aurais pu le réutiliser.
- iter++ et ++iter,; ce n'est pas pareil ! iter++ veut dire: faire une copie, incrémenter, puis réassigner (équivaut à iter = iter + 1). Alors que ++iter veut dire: ne pas faire de copie et directement assigner la valeur. ++iter est donc beaucoup beaucoup plus rapide. D'une manière générale, préfère toujours ++valeur à valeur++.
- Découpe ton code en petites fonctions. Ici, je ne te l'ai pas fait, mais tu devrais avoir une fonction qui affiche le contenu d'un vecteur, et une fonction qui remplit un vecteur en fonction d'un nom de répertoire (donc sortir le milieu du code de main dans une fonction).
Le main devrait ressembler à ça:
Code C/C++ :
std::vector<std::string> liste;
getTermFromDirectory(liste, folder);
displayVector(liste);
Petite correction de ton code,
Code C/C++ :
#include <dirent.h>
#include <string>
#include <vector>
#include <fstream>
#include <iostream>
// créer un vecteur de termes à partir d'un fichier texte
void fillVector(std::vector<std::string>& liste, const std::string& filename)
{
std::ifstream entree(filename.c_str());
if (!entree)
{
std::cerr << "Unable to read the file" << std::endl;
return;
}
std::string s;
while (entree >> s)
liste.push_back(s);
}
int main()
{
typedef std::vector<std::string>::const_iterator iter;
static const std::string folder = "in";
std::vector<std::string> liste;
DIR* rep = opendir(folder.c_str());
if (rep)
{
struct dirent* lecture;
while ((lecture = readdir(rep)))
{
std::string filename = lecture->d_name;
if (filename != "." && filename != "..")
fillVector (liste, folder + "/" + filename);
}
closedir(rep);
}
for (iter it = liste.begin(); it != liste.end(); ++it)
std::cout << *it << " ";
std::cout << std::endl;
return (0);
}
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question