Programme c++ qui compte le nombre d'occurence des termes d'un fichier texte

cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 7 juin 2010 à 14:45
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 8 juin 2010 à 10:51
je veux savoir le nombre d'occurence de tous les termes du fichier "in"; j'ai écrit le programme ci-dessous:

int main(int argc, char* argv[])
{ ifstream doc ("in.txt");
string m,m1;
int i=0;
while (doc >> m)
{ while (doc >> m1)
{if (m == m1)
i=i+1;
}
cout << "le nombre d'occurence du mot " << m << " est " << i << endl;
i=0;
}

system("pause");
return 0;
}
le fichier "in" comporte: ala ala ala ala dit a papa qque chose papa dit a ala que chose
l'exécution de ce code m'affiche comme résultat: le nombre d'occurence du mot ala est 0
alors qu'il doit m'afficher: le nombre d'occurence du mot ala est 5
le nombre d'occurence du mot dit est 2
le nombre d'occurence du mot a est 2
le nombre d'occurence du mot papa est 2
le nombre d'occurence du mot qque est 2
le nombre d'occurence du mot chose est 2
est ce que quelqu'un peut m'aider svp à connaître mon erreur.

2 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
7 juin 2010 à 15:55
C'est tout à fait normal. Tu parcours ton fichier de multiples fois pour rien (une seule fois serait nécessaire) et en plus, pour chaque mot tu ne repars pas du début, mais du mot ou tu es actuellement.
Donc si tu as: "b a b c d", et que tu es sur "b", tu ne verras rien car après "b", il y a "c d", et tu ne cherches que là dessus.

L'astuce est d'utiliser une std::map<std::string, int> et de compter le nombre d'occurence de chaque chaine grâce à une association clé/valeur. Un seul parcours suffira alors.
Je t'invite à regarder la documentation de std::map sur internet, tu verras que c'est très pratique.

PS: Évite les using namespace std, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
0
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
8 juin 2010 à 10:51
Merci bien pour votre aide.
j'ai compris pourquoi éviter les using namespace std, mais pour l'utilisation des map,je suis entrain de voir des documentations sur internet, elle m'a paru un peu difficile.
0
Rejoignez-nous