C + + contient déjà une fonction de comparaison de chaînes - " strcmp ()" - qui effectue la tâche de comparer deux chaînes pour l'égalité. La fonction strcmp () renvoie des valeurs différentes en fonction de la relation entre les cordes une à l'autre . La mise en œuvre d'une fonction strcmp ( ) diffère entre les architectures d'ordinateur ( ou reste sous licence provenant de différents fournisseurs ), mais un programmeur peut ré-écrire la fonctionnalité de base du code pour voir comment cela fonctionne . Pour comprendre la fonction , cependant, le programmeur doit comprendre comment les chaînes, les tableaux et les pointeurs fonctionnent en C et C + + . Cordes, tableaux et les pointeurs En C, les chaînes sont des collections (ou tableaux) de caractères. Par exemple , AB char string [10]; Comme un tableau de 10 caractères , "string" représente une phrase en C. Cependant , les tableaux sont en fait des pointeurs ou des variables référence à l'adresse de mémoire . Le tableau " string" représente en fait un pointeur vers le premier élément dans le bloc de mémoire , et le programmeur peut référencer les autres éléments du tableau grâce à ce pointeur. Définition " strcmp ( ) " < br > Photos La définition de base d'une fonction strcmp ressemblera à ceci: int strcmp ( const char * str1 , const char * str2 ) ; Par définition, une fonction de comparaison de chaînes va utiliser deux tableaux de caractères ( str1 , str2 ) . Étant donné que les tableaux représentent des pointeurs , la définition va prendre deux pointeurs de caractère . Avec ces pointeurs , le programmeur peut vérifier chaque élément dans un tableau contre un autre tableau. Mais d'abord, le programmeur doit déclarer deux variables caractères , qui tiendra les valeurs trouvées dans les deux chaînes: int strcmp ( const char * str1 , const char * str2 ) { caractères a, b; } Traverser la Strings afin de comparer les cordes , la fonction doit comparer chaque caractère de chaque chaîne à une autre . Pour ce faire , le programmeur utilise les deux pointeurs ( str1 , str2 ) de se déplacer en bas de chaque tableau: while ( * str1 = '\\ 0' && * str1 == str2 * ! ) { < p> str1 + + ; //déplace le pointeur de la str1 de chaîne à l'autre personnage str2 + +; //fait la même chose , str2 } La boucle while ne l' recherche : tout d'abord , si str1 succès un caractère de terminaison ( "\\ 0" qui est ajouté à la fin de chaînes par le langage C) , la boucle se ferme , parce que cette chaîne est fait. Deuxièmement, si la valeur de str1 (* str1 ) n'est pas égale à la valeur de str2 (* str2 ) , alors la boucle s'arrête, parce que les chaînes ne sont pas égales . Retour le Résultat sTRCMP retourne l'un des trois résultats : 0 (si les chaînes sont égales ), 1 ( si le premier est supérieur au second ) et -1 ( si le premier est inférieur au second ) : < p> char a = * str1 ; char b = * str2 ; if ( a == b ) { return 0; } d'autre {return ( (a < b ) -1 : 1); } Depuis les boucles s'arrêtent quand il ya inégalité ou lorsque les deux sont terminées, le résultat finira comme deux personnages identiques ( le '\\ 0' symbole ) ou les caractères inégaux trouvés . code Complete le code complet , alors , ressemble à ceci ( et les implémentations variera en fonction de la technique ou des conditions du système ) : int strcmp ( const char * str1 , const char * str2 ) { char a , b; while ( ! * str1 = '\\ 0' && * str1 == str2 * ) { str1 + + ; //déplace le pointeur de la chaîne str1 à l'autre personnage str2 + +; //ne l' même , str2 } char a = * str1 ; char b = * str2 ; if ( a == b ) {return 0; } autre {return ( (a < b ) -1 : 1 );} } entrer deux chaînes , telles que Photos caractères chaine1 [40] = "Ceci est une chaîne " ; caractères chaîne_2 [40] = "Ceci est une chaîne " ; int résultat = strcmp ( chaîne1, chaîne2 ) ; reviendra 0;
|