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 :

comparaison deux chaines


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut comparaison deux chaines
    Est ce que on peut comparer deux chaines directement en langage c
    par exemple
    procedure qui return si la premeiere chaine est inferieur à la deuxieme chaine



    int inferieur(char ch1[],char ch2[])
    {
    return(ch1<ch2);
    }


    est ce que ce juste sinon pourquoi ???

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Ce n'est pas juste, les paramètres de ta fonction sont des pointeurs.

    Dans la fonction tu fait un test sur les deux pointeurs et non pas sur les deux chaines de caracteres sur lesquelles ils pointent.

    Il existe des fonctions pour faire cela en C : strcmp ou strncmp

  3. #3
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Qu'attends tu qu'inférieur te retourne ? Si la longueur de la chaîne 1 est inférieure à celle de la chaîne 2 ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 32
    Points : 89
    Points
    89
    Par défaut
    La fonction standard strcmp est là pour ça:
    http://man.developpez.com/man3/strcmp.3.php

    Personnellement je n'ai jamais été aimé lu resultat (la version standard renvoi 0 si elles sont identiques), je préfère que la fonction renvoi 1 si les chaines sont stricitement identiques sinon 0, j'ai donc fait mes propres fonctions:

    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
     
    int Fstr_compare(const char *t1, const char *t2)
    /* Compare les chaines de caractère t1 et t2, si ils sont strictement identiques (dans leur contenu et leur longeur), renvoi 1, sinon 0 */
    {
        int i = 0;
        do if (t1[i] != t2[i]) return 0;
            while(t1[i++]);
        return 1;
    }
     
    int Fstr_ncompare(const char *t1, const char* t2, int lg)
    /* Compare les chaines de caractère t1 et t2 sur une longeur lg, si ils sont strictement identiques, renvoi 1, sinon 0.
        La comparaison s'arrête si la fonction atteint la fin d'une chaine de caractère, aucun risque de débordement si elles se terminent par '\0' */
    {
        int i;
        for(i=0; i<lg; i++)
        {
            if (t1[i] != t2[i]) return 0;
            if (t1[i] == '\0') return 1;
        }
        return 1;
    }
    Exemple d'utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Fstr_compare("Chaine1", "Chaine1"); //Renvoi 1
    Fstr_compare("Chaine1", "Chaine2"); //Renvoi 0
    Elles sont plutôt rapides mais moins que strcmp dans la glibc (qui est implémenté en assembleur) elles ne sont pas non plus très utiles pour faire du tri.
    Il y a plusieurs manière d'interpréter la phrase "procedure qui return si la premeiere chaine est inferieur à la deuxieme chaine"
    Est ce que tu parles de comparer la longeur des chaines ? De la somme arithmétique de chaque caractère sur la table ASCII ? Par ordre alphabétique ? Hashage ?
    Ou autre chose encore ?

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Diablo150 Voir le message
    La fonction standard strcmp est là pour ça:
    http://man.developpez.com/man3/strcmp.3.php

    Personnellement je n'ai jamais été aimé lu resultat (la version standard renvoi 0 si elles sont identiques), je préfère que la fonction renvoi 1 si les chaines sont stricitement identiques sinon 0
    Arf, t'as pas tout lu/vu

    La fonction strcmp() renvoie 4 infos distinctes
    - 0 si les chaines sont égales
    - un nombre x négatif si ch1 < ch2
    - un nombre x positif si ch1 > ch2
    - la valeur absolue x indiquant la position du premier caractère qui diffère (numérotation commence à 1 et non à 0)

    Toutes ces infos peuvent être pas mal utiles non ???
    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]

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    - la valeur absolue x indiquant la position du premier caractère qui diffère (numérotation commence à 1 et non à 0)
    Là par contre il fallait préciser que c'est le standard POSIX et non la norme ISO/IEC qui le stipule.

Discussions similaires

  1. problème de comparaison deux chaines de caractères
    Par jean sami dans le forum Débuter
    Réponses: 2
    Dernier message: 15/06/2008, 23h47
  2. Comparaison deux chaine de caractère arabe en java
    Par vetchang dans le forum Général Java
    Réponses: 9
    Dernier message: 08/10/2007, 23h53
  3. Comparaison de deux chaines
    Par sam.fet dans le forum Linux
    Réponses: 5
    Dernier message: 09/05/2006, 14h54
  4. comparaison de deux chaines de caractères
    Par zazou41 dans le forum C++
    Réponses: 6
    Dernier message: 27/02/2006, 14h26
  5. Réponses: 5
    Dernier message: 06/10/2003, 17h49

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