IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tri alphabetique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut Tri alphabetique
    Bonjour j aimerais savoir comment proceder pour faire un tri sur une chaine de caracteres...
    Comparer leur premier caractere....
    merci wil

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Salut, tu pourrais préciser exactement ce que tu veux faire, tu parles d'une comparaison sur une chaîne de caractère puis sur deux...

  3. #3
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut Re: Tri alphabetique
    Pour comparer deux chaines : str*cmp
    Pour faire un tri quelconque : qsort

    Si tu veux d'avantage de reponses, donne plus de details

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  4. #4
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut Re: Tri alphabetique
    Tu veux comparer deux chaînes de caractères pour savoir si elles sont égales, différentes...Il esxiste la fontion strcmp pour ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <string.h>
    int main() {
      int p;
     char *Etalon = "Etalon";
     char *Deuxio = "Autre";
     char *Egal  = "Etalon";
     
       if (strcmp(Etalon,Deuxio) != 0)
              printf("%s est différente de %s\n",Etalon,Deuxio);
       if (strcmp(Etalon,Egal) == 0)
              printf("%s est égale à %s\n",Etalon,Deuxio);
      scanf("%d",&p);
    }
    Citation Envoyé par wil4linux
    Bjr j aimerai savoir comment proceder pr faire tri sur une chaine de caractere...
    Comparer lur premier caractere....
    merci wil

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Tri alphabetique
    Citation Envoyé par wil4linux
    Bjr j aimerai savoir comment proceder pr faire tri sur une chaine de caractere...
    Comparer lur premier caractere....
    merci wil
    avec qsort() et strcmp() dans la fonction de comparaison. Bien lire la doc, c'est un peu piégeux...

  6. #6
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    Je reformule + precisement.

    Je dispose d'un tableau de type contact, caractérisé par un nom, prenom, telephone, où le nom prenom et tel sont des char[40]

    j aimerai faire diferente fonctions sur ce tableau dont un tri par ordre alphabétique sur le nom.
    et par la suite, les afficher selon la premiere lettre:

    A:
    arnaud...
    B:
    berangere
    bernard
    ....

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    C'est un tableau multidimensionnel?

    (Je te conseille les listes chaînées).

  8. #8
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Montres-nous comment tu codes ton tableau "contact" avec les "char[40]"


  9. #9
    Nouveau candidat au Club
    Inscrit en
    Février 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 2
    Par défaut [Tri d'un tableau de chaînes]
    Bonjour,
    Les questions que vous posez m'intéressent beaucoup.

    Cependant il faudrait nous en dire plus. Que voulez-vous savoir excatement.

    Ce que je sais c'est que pour trier un tableau de chaînes, par ordre alphabétique sans distinguer les majuscules des miniscules il faut utiliser le fonction stricmp et non strcmp.

  10. #10
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    c est un tableau de liste chainée.

    je met le code a l arrache ( c un *.h):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    typedef char chaine[40];
    class contact{
    	private:
    		chaine nom;
    		chaine prenom;
    		chaine tel;
     
    	public:
    		contact(){ // constructeur
    			strcpy(nom,"");
    			strcpy(prenom,"");
    			strcpy(tel,"");
       		}
     
    		void afficher_contact(){
    			printf("\nNom: %s",nom);
    			printf("\nPrenom: %s",prenom);
    			printf("\nTelephone: %s",tel);
    		}
    		char * getnom(){
    			return nom;
    		}	
     		char * getprenom(){
    			return prenom;
    		}
     		char * gettel(){
    			return tel;
    		}
     		void setnom(chaine n){
    			strcpy(nom,n);		
       		}
     		void setprenom(chaine p){
    			strcpy(prenom,p);
    		}		
     		void settel(chaine t){
    			strcpy(tel,t);
    		}
    };
     
    //-------------------Class Repertoire---------------------
    class repertoire{
    	private:
    		int nbc;
    		contact tab[N];
     
    	public:
    		repertoire(){ // constructeur
     		    nbc=0;
            }
     
    		int new_contact(chaine n, chaine p, chaine t);
    		int ajouter_contact(contact c); // ajouter les enr du fichier ds le tableau contact
     		int supprimer_contact(chaine n);
            char * afficher_nom_contact(int i);
            char * afficher_prenom_contact(int i);
            char * afficher_tel_contact(int i);
     		void afficher_repertoire();
     		void tri_nom();
     		void tri_prenom();
     		int nb_contact();
     		void rechercher_nom(chaine n);
     		void rechercher_prenom(chaine p);
     		void rechercher_tel(chaine t);
    };
     
    //---le '::' c'est l indicateur de portée.
     
    int repertoire::new_contact(chaine n, chaine p, chaine t){
    	int add;
     	if(nbc<N-1){
        	nbc++;
        	tab[nbc].setnom(n);
        	tab[nbc].setprenom(p);
        	tab[nbc].settel(t);
        	add=1;
    	}
    	else{
        	add=0;
    	}
    	return add;
    }
     
    int repertoire::ajouter_contact(contact c){
    	int b=0;
    	if(nbc<N){
    		tab[nbc]=c;
    		nbc++;
    		b=1;
    	}
    	else{
    		b=0;
    	}
    	return b;
    }
     
    int repertoire::supprimer_contact(chaine n){
    	int i;
    	return i;
    }
     
    char * repertoire::afficher_nom_contact(int i){
    	return tab[i].getnom();
    }
     
    char * repertoire::afficher_prenom_contact(int i){
    	return tab[i].getprenom();
    }
     
    char * repertoire::afficher_tel_contact(int i){
    	return tab[i].gettel();
    }
     
    void repertoire::afficher_repertoire(){
    	int i;
    	if(nbc==0){
        	printf("\nLe prepertoire est vide");
     	}
     	else{
     		for(i=0;i<nbc;i++){
    			printf("\n\nNom: %s\nPrenom: %s\nNote: %f",tab[i].getnom(),tab[i].getprenom(),tab[i].gettel());
    		}
    	}
    }
     
    void repertoire::tri_nom(){
    }
     
    void repertoire::tri_prenom(){
    }
     
    int repertoire::nb_contact(){
    	return nbc;
    }
     
    void repertoire::rechercher_nom(chaine n){
    	pas encore fait
    }
     
    void repertoire::rechercher_prenom(chaine p){
    	pas encore fait
    }
     
    void repertoire::rechercher_tel(chaine t){
    	pas encore fait
    }

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par wil4linux
    c est un tableau de liste chainée.

    je met le code a l arrache ( c un *.h):

    typedef char chaine[40];

    class contact{
    pas du C...

    <edit>
    Oups, j'avais pas vu le déplacement sur le forum C++. Désolé

    Je sors...
    </edit>

  12. #12
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    ce sont les methode tri_nom(), tri_prenom(), que j aimerais faire.
    c'est donc un tableau de liste chainé en fait je l'instancie dans mon programme principal. Je vais chercher des enregistrements dans un fichier, puis j'instancie le tableau avec la methode ajouter_contact(contact c)

    Il y a quelques petites fautes de compilation. Ne vous inquitez pas, je n'ai pas encore tout résolu.

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Hum ... Pour du C++, il y a diverses choses à reprendre -- certaines l'étaient aussi en C.

    En C++ correct (pas de débordements, pas de risques d'exceptions non contrôlées, pas de pointeurs nuls, const-correct, ...) et rapidement pondu, cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <string>    // std::string
    #include <algorithm> // std::sort, std::copy
    #include <vector>    // std::vector
    #include <iterator>  // std::ostream_iterator
    #include <iosfwd>    // std::ostream
     
    struct contact {
        contact (std::string & const nom /* etc, autres champs*/)
        : nom_(nom) // voir "liste d'initialisation"
        {}
     
        // pas besoin de destructeur.
        // les constructeur et operateur de recopie générés par défaut suffisent
     
        // Je garde la paire accesseur/mutateur, mais c'est discutable ici
        std::string & const getNom() const 
        { return nom_; }
        void setNom(std::string & const nom) 
        { nom_ = nom; }
    private:
        std::string nom_; //!< Le nom ....
    };
     
    std::ostream& operator<<(std::ostream & os, contact const & c)
    { return os<< c.getNom(); }
     
    struct SuivantNom {
        bool operator()(contact const & lhs, contact const & rhs) const
        { return lhs.getNom() < rhs.getNom(); }
    };
     
    struct repertoire {
        void ajoute_contact(std::string & const nom /* etc, autres champs*/)
        { contacts_ . push_back( contact(nom) ) ; }
     
        void trier_suivant_nom()
        { std::sort(contacts_.begin(), contacts_.end(), SuivantNom()); }
     
        friend std::ostream & operator<<(
            std::ostream & os, repertoire const & r)
        {
            std::copy(r.contacts_.begin(), r.contacts_.end(), 
                std::ostream_iterator<contact>(os, "\n"));
            return os;
        }
        ....
    private:
        std::vector<contact> contacts_;
    };
     
    ..... ailleurs comme dans un main qui inclut <iostream> (sans .h!!!)
    repertoire r;
    r.ajoute_contact("toto");
    r.ajoute_contact("titi");
    r.trier_suivant_nom();
    std::cout << r;
    Tu devrais trouver la même chose à peu près dans la FAQ.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  14. #14
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Comme te le montre Luc Hermitte, en C++ on utilise les conteneurs (STL) afin de s'affranchir du travail plutôt "laborieux" des listes chaînées.

    Malgré tout, l'utilisation des listes chaînées est un très bon exercice de programmation.

    Si tu codes en C++, prends le temps de lire ce document:

    http://www.developpez.biz/download/stl.pdf

    Si tu tiens vraiment à le programmer "à la C", et que tu postes dans le forum C, alors ne donnes que du code en C. Sinon c'est la redirection obligatoire...

    En C++, on va surtout te conseiller d'utiliser les outils et les concepts du C++. Ce n''est pas évident au début mais après c'est un vrai régal.

  15. #15
    Membre confirmé Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Par défaut
    merci bcp, mais je suis bien habituer a la structure du c, il est vrai que je comprend pas grand chose au code ci dessus...lol
    je sens ke je vais me tartiner de la doc.......

  16. #16
    Nouveau candidat au Club
    Inscrit en
    Février 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 2
    Par défaut
    Bonjour

    Avez vous la possibilité de me trouver un cours en ligne sur les tableaux de structures.

    J'aimerai tous apprendre : les structures puis les différentes manipulations qu'on peut effectuer sur les tableaux de structures.

    Merci pour vos réponses.

  17. #17
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Poses cette question dans le forum C.

    Nous t'avons déjà orienté vers les conteneurs.

    Si tu tiens vraiment a utilisé des tableaux de structure va dans le forum C. Tu auras plus de réponse.

    D'ailleurs on va surtout te conseiller des listes chaînées de structure.

    Bonne chance.

  18. #18
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Arf... Je me suis trompé de personne.

    Ben suis mon conseil. Pourquoi tu n'as pas créé un nouveau message?

Discussions similaires

  1. Tri alphabétique
    Par altruist dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2006, 21h02
  2. [deb]Try alphabetique de string?
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/12/2005, 11h04
  3. [LG]Tri alphabetique avec les pointeurs
    Par zbooon dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2005, 17h04
  4. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  5. [LG]tri alphabétique
    Par Marcus2211 dans le forum Langage
    Réponses: 5
    Dernier message: 17/11/2003, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo