C++

ra92 -  
mamiemando Messages postés 33228 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

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    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