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 );} }
< p > 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;