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
Bonjour,


j'ai une probleme du comprendre exercice:

question::develloper class abr qui permet de trier un fichier de mots a travers un arbre binaire de recherche ,le fichier contient du mots de taiile diffrents

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
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 :

#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
0