C++

Fermé
ra92 - 28 mai 2013 à 23:31
mamiemando Messages postés 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 - 15 juin 2013 à 11:59
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 32283 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 mars 2023 7 572
15 juin 2013 à 11:59
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