C++

ra92 -  
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   -
je veux avoir un constructeur ayant comme paramètre le nom d'un fichier texte et je veux créer un arbre binaire de recherche avec le contenu du fichier

1 réponse

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Ce serait pas mal de commencer ton message par "bonjour" et de le finir par "merci".

Ensuite sans préciser ce que tu stockes dans ton arbre binaire et comment tu l'organises, la question n'a pas de sens.

Donc en admettant que tu veuilles lire ton fichier mot à mot et classer ces mots dans un arbre binaire, voilà à quoi ça pourrait ressembler :

#include <fstream>
#include <iostream>
#include <set>
#include <string>
#include <cstdlib>

int main(int argc, char ** argv) {
    const char          * filename;
    std::string           word;
    std::set<std::string> words;

    if (argc != 2) {
        std::cerr << "Usage: " << argv[0] << " filename" << std::endl;
        return EXIT_FAILURE;
    }   
    filename = argv[1];
    
    std::ifstream ifs(filename);
    if (!ifs) {
        std::cerr << argv[0] << ": Can't read " << filename << std::endl;
        return EXIT_FAILURE;
    }         
              
    while (ifs.good()) {
        ifs >> word;
        if (!ifs.fail()) {
            words.insert(word);
        }   
    }         
              
    {         
        std::set<std::string>::const_iterator
            words_it (words.begin()),
            words_end(words.end());
        for (; words_it != words_end; ++words_it) {
            std::cout << *words_it << std::endl;
        }     
    }         
              
    return EXIT_SUCCESS;
}


Et si la question est "où est l'arbre binaire", eh bien c'est tout simplement "std::set<...>" qui en est un (arbre rouge noir).
https://fr.wikipedia.org/wiki/Arbre_bicolore

Si on utilise ce fichier d'entrée (toto.txt) :

aaa bbb aaa ccc
dd eee ddd
aa


... voici ce que donne le programme :

(mando@silk) (~) $ g++ toto.cpp && ./a.out toto.txt 
aa
aaa
bbb
ccc
dd
ddd
eee


Tu noteras que les doublons sont supprimés (ils correspondent à la même feuille) et les mots apparaissent dans l'ordre lexicographique (donc c'est bien la preuve que l'arbre maintenu par std::set est ordonné).

Bonne chance
0