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 par ordre alphabétique


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut Tri par ordre alphabétique
    Bonjour,

    Je prends un exemple, j'ai deux pointeurs de type caractère comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *mot1 = "bonjour";
    char *mot2 = "aurevoir";
    Et je souhaite les afficher par ordre alphabétique. Cela fait deux heures que j'essaie avec isalpha mais je n'y arrive pas.

    Quelqu'un peut-il m'aider ?

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    l'encodage ASCII (et donc les autres aussi ...) a le bon gout d'être déjà rangé dans l'ordre alphabétique, donc tu peux faire un truc comme ç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
    15
    16
    const char *mot1 = "bonjour"; /* bien dit Winjerome. N.B.: la valeur ne doit pas être modifier, sinon pas de const. */
    const char *mot2 = "aurevoir";
     
    const char *first;
    const char *second;
     
    if (mot1[0] < mot2[0])
    {
      first = mot1;
      second = mot2;
    }
    else
    {
      first = mot2;
      second = mot1;
    }
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Novembre 2014
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur après-vente

    Informations forums :
    Inscription : Novembre 2014
    Messages : 367
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup, mais à quoi sert ce "const" au juste ?

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    A dire que la valeur est constante: une foi définit elle ne peut pas changé (le compilateur doit l'empêcher).
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  6. #6
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    @InitSreen : et que fais-tu si les deux chaînes commencent par le même caractère ?

  7. #7
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    Comme ç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
    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
    const char *mot1 = "abcde";
    const char *mot2 = "abcdz";
     
    char *first = NULL;
    char *second = NULL;
     
    const char *max_length_word;
     
    int i, min_length;
     
    if ( (strlen(mot1)) > (strlen(mot2)) )
    {
      min_length = strlen(mot2);
      max_length_word = mot1;
    }
    else if ( (strlen(mot1)) < (strlen(mot2)) )
    {
      min_length = strlen(mot1);
      max_length_word = mot2;
    }
    else
    {
      min_length = strlen(mot1);
      max_length_word = mot1;
    }
     
     
    for (i = 0; i < min_length; i++)
    {
      if (mot1[i] < mot2[i])
      {
        first = mot1;
        second = mot2;
        break;
      }
      else if (mot1[i] > mot2[i])
      {
        first = mot2;
        second = mot1;
        break;
      }
      else
        continue;
    }
     
    /*
    ** Si la taille du mot1 est égale à la taille du mot2 et que le mot1 et égale au mot2 dans l'ordre alphabétique
    ** alors mot1 vient en premier dans l'ordre finale car il est le premier fourni.
    */
    if  (first == NULL)
    {
      first = max_length_word;
      (first == mot1) ? (second=mot2) : (second=mot1);
    }
    Enfin ça suppose qu'il n'y ait que des caractères alpha-numériques. Après si ce n'est pas le cas, c'est surement que ce n'est pas du tri par ordre alphabétique.
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

  8. #8
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    @InitSreen: mouais... Ton algo est plutôt mauvais... Un truc dans ce genre (comme strcmp) serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int _strcmp(const char *s1, const char *s2) {
        while (*s1 && *s2 && *s1 == *s2) {
            s1++;
            s2++;
        }
        return *s1 - *s2;
    }

  9. #9
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 359
    Points : 738
    Points
    738
    Billets dans le blog
    2
    Par défaut
    C'est sûr...
    Le gourou dicte la ligne (de commande) à suivre ...

    Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
    ainsi que le Cour sur la ligne de commande et des scripts

Discussions similaires

  1. Tri par ordre alphabétique d'un tabular
    Par max0u86 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 21/08/2008, 22h31
  2. Tri par ordre alphabétique sans tenir compte d'une chaîne
    Par Msieurduss dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/06/2008, 10h32
  3. problème tri par ordre alphabétique
    Par bibi 8002 dans le forum Word
    Réponses: 17
    Dernier message: 18/06/2008, 15h21
  4. Réponses: 8
    Dernier message: 26/07/2007, 11h46
  5. Tri par ordre alphabétique
    Par orus8 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/04/2003, 19h27

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