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 :

qsort nombre et chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 13
    Par défaut qsort nombre et chaine
    Bonjours,

    Donc voila j'ai un problème avec la fonction


    quand je donne des valeur a ranger en char il m’envoie ça :

    AVANT :
    1 3 437 t negcy
    1 248 260 568 g
    1 199 424 393 919 et lfsii cvttu mjgh
    1 117 491 wi extu afj

    APRES:
    1 117 491 wi extu afj
    1 199 424 393 919 et lfsii cvttu mjgh
    1 248 260 568 g
    1 3 437 t negcy


    le problème le dernière doit être en premier mais je vois pas ou comment réglé le problème


    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
     
     
     
    static void affiche(char const **a, size_t n)
    {
       size_t i;
       i = 0;
       while (i < n)
       {
          printf ("%s\n", a[i]);
          i++;
       }
       printf ("\n");
    }
     
    static int comp(void const *az,void const *b) 
    {
       char const *const *pa = az;
       char const *const *pb = b;
     
       return strcmp (*pa, *pb);
    }
     
    int main (void)
    {
       char const *tabz[] = {"1 3 437  t negcy", "1 248 260 568  g","1 199 424 393 919  et lfsii cvttu mjgh","1 117 491  wi extu afj"};
     
     
       affiche(tabz,(sizeof tabz / sizeof *tabz));
       qsort(tabz, (sizeof tabz / sizeof *tabz), sizeof *tabz, comp);
       affiche(tabz, (sizeof tabz / sizeof *tabz));
     
       return 0;
    }

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hoe,

    En ce qui me concerne, s'agissant de chaînes de caractères, le classement obtenu est normal.

    Si tu veux un classement en tenant compte des différentes valeurs numériques contenues dans les chaînes, il faut faire une traitement spécifique, gsort n'a absolument aucun moyen de le faire, et encore moins de deviner ce que tu désires.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Citation Envoyé par droggo Voir le message
    Si tu veux un classement en tenant compte des différentes valeurs numériques contenues dans les chaînes, il faut faire une traitement spécifique, gsort n'a absolument aucun moyen de le faire, et encore moins de deviner ce que tu désires.
    Dans tous les cas, même les plus triviaux, qsort() s'appuie quand même sur une fonction de callback. Ici c'est sa fonction « comp() ». Il se trouve que cette fonction utilise elle-même strcmp(), mais c'est bien elle qu'il faudrait modifier…

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par royalxm Voir le message
    quand je donne des valeur a ranger en char il m’envoie ça :

    AVANT :
    1 3 437 t negcy
    1 248 260 568 g
    1 199 424 393 919 et lfsii cvttu mjgh
    1 117 491 wi extu afj

    APRES:
    1 117 491 wi extu afj
    1 199 424 393 919 et lfsii cvttu mjgh
    1 248 260 568 g
    1 3 437 t negcy


    le problème le dernière doit être en premier mais je vois pas ou comment réglé le problème
    Bonjour

    Le probleme c'est que tu crois que 3 est inferieur a 117 alors qu'en realite, {'1', '1', '7', '\0'} est bien inferieur a {'3', '\0'}. Tu aurais du reflechir plus profondement a tes propres termes ranger en char.

    Pour avoir un resultat correspondant a un tri numerique, il faut que comp()
    1. extraie chaque nombre de la chaine qu'elle recoit (enfin chaque "token" separe par un espace)
    2. convertisse ce nombre "litteral" en nombre "numerique" (si c'est bien un nombre)
    3. compare les nb un a uns entre la chaine 1 et la chaine 2 et sorte des que l'un des deux est inferieur ou superieur a l'autre
    4. si un des tokens extraits n'est pas numerique pur (plus simplement si la conversion echoue}, alors elle revient vers strcmp() pour le reste de la chaine
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. convertir nombre en chaine de caratere fixe
    Par Emcy dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 06/02/2007, 10h42
  2. extraction nombre from chaine caractere
    Par Matmal11 dans le forum Modules
    Réponses: 4
    Dernier message: 22/01/2007, 13h59
  3. conversion dun nombre en chaine de caractère?
    Par franco82 dans le forum C++
    Réponses: 8
    Dernier message: 30/11/2006, 19h05
  4. convertir un nombre en chaîne de caractères
    Par Calbane dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/04/2006, 20h12
  5. convertir un nombre en chaine de caractere
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 3
    Dernier message: 23/11/2005, 11h24

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