Partage
  • Partager sur Facebook
  • Partager sur Twitter

strcmp

Sujet résolu
    8 juin 2006 à 17:21:10

    Hello!

    J'ai une mini question:
    La fonction strcmp renvoie 0 si les deux chaines sont identiques, mais qu'arrive-t-il si les deux chaînes contiennent sont equivalentes sans etre identiques.
    J'ai cru comprendre que la "valeur" des chaines sont données a partir de la somme de la valeur de chaque caractere selon la table ASCII.

    Citation : http://www.thinkage.ca/english/gcos/expl/c/lib/strcmp.html

    Comparisons of "greater than" and "less than" are made according to the ASCII collating sequence.

    (Enfin c'est ce que j'ai cru comprendre).

    Si la valeur des deux est la meme sans être identiques
    Exemple : "ABBA" et "ABAB"

    J'ai cherché sur plusieurs sites mais tous décrivent la fonction comme suit :

    Citation : Plusieurs sites

    This function compares two strings. If the first string is greater than the second, it returns a number greater than zero. If the second string is greater, it returns a number less than zero. If the strings are equal, it returns 0.



    ou

    Citation : http://fr.wikibooks.org/wiki/Programmation_C_Cha%C3%AEnes_de_caract%C3%A8res

    Compare les chaînes chaine1 et chaine2 et renvoie un entier :

    * négatif, si chaine1 est inférieure à chaine2 ;
    * nul, si chaine1 est égale à chaine2 ;
    * positif, si chaine1 est supérieur à chaine2.



    Quelqu'un peut-il m'éclaircir la dessus?
    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 17:27:56

      bah à mon avis si il compare ABBA et ABAB

      • Il compare 'A' à 'A' -> Ok
      • Il compare 'B' à 'B' -> Ok
      • Il compare 'B' à 'A' -> Pas Ok -> retourne 1
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 17:39:15

        et pourquoi pas -1 ?
        Qu'est-ce qui établi que A est supérieur a B? :o
        Parce que c'est bien ça qu'ils disent: renvoie un nombre positif si chaine1 est supérieure a la chaine 2... et vice versa...
        • Partager sur Facebook
        • Partager sur Twitter
          8 juin 2006 à 17:41:19

          Oui j'ai du me tromper. Le meilleur moyen de vérifier est de tester


          printf("%d",strcmp("ABBA","ABAB"));
          • Partager sur Facebook
          • Partager sur Twitter
            8 juin 2006 à 17:53:06

            Il s'agit, me semble-t-il, de l'ordre lexicographique. Comme l'a dit tebonb, on compare les lettres les unes après les autres. Si on tombe sur des lettres différentes, alors on compare leur valeur ascii pour déterminer qui est le plus grand.

            Plus simplement, à casse fixe (minuscule ou majuscule), c'est l'ordre du dictionnaire.

            • Partager sur Facebook
            • Partager sur Twitter
              8 juin 2006 à 17:57:32

              Thebonb, je veux surtout comprendre le fonctionnement de la fonction, c'Est-a-dire comment elle donne tel resultat...

              Yoxo, donc si je comprend bien, admettons que l'on a ABBA et ABAB,
              la fonction verfie chaque lettre A=A, B=B, B>A -> la boucle s'arrete et retourne +1 car B vaut 1 de plus que A (selon la table ASCII) et oublie le reste des lettres?
              • Partager sur Facebook
              • Partager sur Twitter
                8 juin 2006 à 18:03:08

                Aîe mon pseudo. Sinon oui je pense que dés qu'il détecte une lettre différente, il retourne sois 1 ou -1, la en l'occurence il retourne 1 car 'B' > 'A' (j'ai testé)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 juin 2006 à 21:53:55

                  strcmp retourne un valeur qui dépends de l'ordre alphabêtique des chaines classées. Enfin, ordre alphabêtique si vous ne lui passer que des mots de même casse contenant que des lettres. Il considère sa table ASCII comme la référence, et donc pour lui on a 'a' < 'z' mais 'A' > 'z' (ou 'a' > 'Z', je sais plus trop, faut vérifier dans la table).
                  Vous pouvez regarder en affichant les 128 premiers caractères de la talbe avec un boucle qui augmente la valeur du char que vous affichez, ça vous permet d'avoir une idée pour les symboles "courants" seuls d'ailleurs pour lesquels d'ailleurs l'ordre alphabêtique a encore un sens...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  strcmp

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown