Aide C++: Gestion de chaine
Fermé
bifaka
-
18 janv. 2007 à 12:18
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 18 janv. 2007 à 20:28
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 18 janv. 2007 à 20:28
3 réponses
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
18 janv. 2007 à 16:59
18 janv. 2007 à 16:59
Salut,
Je pense qu'il faudrait que tu repenses l'organisation de ton code de la manière suivante :
- la classe telefonBook n'a pas à dériver de la classe trier. Elle doit simplement gérer les propriétés d'une personne (et devrait donc s'appeler simplement "contact").
- la classe trier doit devenir ce que l'on appelle une liste qui gère l'ensemble des personnes (c'est elle qui doit s'appeler telefonBook). Pour cela, elle doit donc avoir entre autre les méthodes suivantes :
- Ajout/Suppression d'un personne
- Trie des personnes
- Méthodes d'affichage des personnes
Je pense qu'il faudrait que tu repenses l'organisation de ton code de la manière suivante :
- la classe telefonBook n'a pas à dériver de la classe trier. Elle doit simplement gérer les propriétés d'une personne (et devrait donc s'appeler simplement "contact").
- la classe trier doit devenir ce que l'on appelle une liste qui gère l'ensemble des personnes (c'est elle qui doit s'appeler telefonBook). Pour cela, elle doit donc avoir entre autre les méthodes suivantes :
- Ajout/Suppression d'un personne
- Trie des personnes
- Méthodes d'affichage des personnes
lirey83
Messages postés
75
Date d'inscription
mardi 2 janvier 2007
Statut
Membre
Dernière intervention
18 août 2007
13
18 janv. 2007 à 17:24
18 janv. 2007 à 17:24
Regardes l'exemple suivant :
https://codes-sources.commentcamarche.net/
Dans ce cas, il s'agit de liste chainée, mais le principe est le même (à la place du pointeur "suivant", il suffit juste d'avoir un tableau qui contient les pointeurs des élèves). Il suffit juste de rajouter la fonction de trie que tu as écrit ...
https://codes-sources.commentcamarche.net/
Dans ce cas, il s'agit de liste chainée, mais le principe est le même (à la place du pointeur "suivant", il suffit juste d'avoir un tableau qui contient les pointeurs des élèves). Il suffit juste de rajouter la fonction de trie que tu as écrit ...
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
18 janv. 2007 à 20:28
18 janv. 2007 à 20:28
Bon j'ai pas de compilateur sous la main mais en gros tu peux faire ça :
Bonne chance
#include <iostream> #include <fstream> #include <set> #include <sstream> #include <string> // La structure décrivant une ligne de fichier typedef struct _data_t{ std::string firstname; std::string name; unsigned int phone; } data_t; // Lit une ligne de fichier line et la stocke dans data bool read_line(data_t & data,const std::string & line){ std::istringstream iss (line,std::istringstream::in); iss >> data.name >> data.firstname >> data.phone; std::cout << "Ligne lue : name = " << data.name << " firstname = " << data.firstname << " phone = " << phone << std::endl; return true; } // Lit un fichier file_in et stocke toutes les infos dans data_set bool read_file(std::ifstream & file_in,std::set<data_t> & data_set){ if (fichier){ // ce test échoue si le fichier n'est pas ouvert std::string ligne; // variable contenant chaque ligne lue // cette boucle s'arrête dès qu'une erreur de lecture survient while ( std::getline( fichier, ligne ) ){ data_t data_cur; if(!read_line(data_cur,ligne)){ std::cerr << "Ligne invalide : " << ligne << std::endl; } data_set.insert(data_cur); } return true; } return false; } // Cette structure défini la relation d'ordre pour trier les élements // de type data_t (dans les std::map, std::set etc...) struct sort_by_name_firstname_phone{ bool operator()(const data_t & x,const data_t & y){ return (x.name < y.name) || ((x.name == y.name) && (x.firstname < y.firstname)) || ((x.name == y.name) && (x.firstname == y.firstname) && (x.phone < y.phone)); } }; // La fonction main int main(){ // L'ensemble des données, ordonnées par // sort_by_name_firstname_phone std::set<data_t,sort_by_name_firstname_phone> data_set; const char *filename_in = "plop.txt"; std::ifstream file_in(filename_in); if(!read_file(file_in,data_set)){ std::cerr << "Impossible d'ouvrir le fichier " << filename_in << std::endl; return 1; } // Afficher l'ensemble std::set<data_t,sort_by_name_firstname_phone>::const_iterator sit (data_set.begin()), send(data_set.end()); for(;sit!=send;++sit){ const data_t & data_cur = *sit; std::cout << "name = " << data.name << " firstname = " << data.firstname << " phone = " << phone << std::endl; } return 0; }
Bonne chance