Probleme en c++
Fermé
wassimovic
-
26 déc. 2012 à 16:44
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 5 janv. 2013 à 01:06
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 5 janv. 2013 à 01:06
1 réponse
mamiemando
Messages postés
33093
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 mai 2024
7 752
5 janv. 2013 à 01:06
5 janv. 2013 à 01:06
L'énoncé ne veut pas dire grand chose.
- Que signifie "trier" (dans quel ordre) ?
- Comment est formé le fichier (un mot par ligne, y a t'il de la ponctuation etc...) ?
Une manière de faire est de lire le fichier ligne par ligne (par exemple avec std::getline) et de récupérer les mots un par un (par exemple avec std::strtok) :
http://www.cplusplus.com/reference/cstring/strtok/
http://www.cplusplus.com/reference/string/string/getline/
Ensuite en temps normal on utiliserait simplement un std::set<std::string> pour stocker tous les mots qui utilise par défaut la relation d'ordre std::less<std::string> (ie l'ordre lexicographique).
http://www.cplusplus.com/reference/set/set/
En interne, un std::set repose sur un arbre rouge noir qui est effectivement un arbre binaire (j'imagine que c'est le but de l'exercice) :
https://fr.wikipedia.org/wiki/Arbre_bicolore
Il suffit en ensuite d'itérer sur cet arbre pour écrire les mots dans le bon ordre.
Exemple :
... ce qui donne à l'exécution :
J'imagine que le but de ton exercice consiste plus ou moins à recoder l'équivalent d'un std::set<std::string>...
Bonne chance
- Que signifie "trier" (dans quel ordre) ?
- Comment est formé le fichier (un mot par ligne, y a t'il de la ponctuation etc...) ?
Une manière de faire est de lire le fichier ligne par ligne (par exemple avec std::getline) et de récupérer les mots un par un (par exemple avec std::strtok) :
http://www.cplusplus.com/reference/cstring/strtok/
http://www.cplusplus.com/reference/string/string/getline/
Ensuite en temps normal on utiliserait simplement un std::set<std::string> pour stocker tous les mots qui utilise par défaut la relation d'ordre std::less<std::string> (ie l'ordre lexicographique).
http://www.cplusplus.com/reference/set/set/
En interne, un std::set repose sur un arbre rouge noir qui est effectivement un arbre binaire (j'imagine que c'est le but de l'exercice) :
https://fr.wikipedia.org/wiki/Arbre_bicolore
Il suffit en ensuite d'itérer sur cet arbre pour écrire les mots dans le bon ordre.
Exemple :
#include <set> #include <string> #include <iostream> int main() { typedef std::set<std::string> words_t; words_t words; words.insert("coucou"); words.insert("bonjour"); words.insert("hello"); words.insert("bonjour"); for(words_t::const_iterator word_it = words.begin(); word_it != words.end(); ++word_it) { std::cout << *word_it << std::endl; } return 0; }
... ce qui donne à l'exécution :
bonjour coucou hello
J'imagine que le but de ton exercice consiste plus ou moins à recoder l'équivalent d'un std::set<std::string>...
Bonne chance