C + + contiene già una funzione di confronto di stringa - " strcmp ( ) " - che svolge il compito di confrontare due stringhe per l'uguaglianza. Il strcmp ( ) restituisce valori diversi a seconda del rapporto delle corde tra loro . L' implementazione di una funzione strcmp ( ) differisce tra architetture di computer ( o rimane in licenza da fornitori diversi ) , ma un programmatore può implementare nuovamente la funzionalità di base del codice per vedere come funziona. Per capire la funzione , però , il programmatore deve capire come stringhe, vettori e puntatori lavorano in C e C + + . Stringhe, vettori e puntatori
In C , le stringhe sono collezioni ( o array ) di caratteri. Per esempio , Stati stringa char
[ 10 ] ;
un array di 10 caratteri , " stringa " rappresenta una frase in C. Tuttavia , le matrici sono in realtà puntatori , o variabili relative all'indirizzo di memoria . L'array " stringa" rappresenta in realtà un puntatore al primo elemento nel blocco di memoria , e il programmatore può fare riferimento agli altri elementi della serie attraverso questo puntatore .
Definire " strcmp ( ) " < br >
La definizione di base di una funzione strcmp sarà simile a questa :
int strcmp ( const char * str1 , char * str2 ) ;
per definizione , un funzione di confronto di stringa utilizzerà due array di caratteri ( str1 , str2 ) . Dal momento che le matrici rappresentano puntatori , la definizione avrà due puntatori di caratteri. Con questi puntatori , il programmatore può controllare ogni elemento in un array contro un altro array. Prima, però, il programmatore deve dichiarare due variabili carattere , che conterrà i valori riscontrati nelle due stringhe :
int strcmp ( const char * str1 , char * str2 ) {
char a, b;
}
Attraversa la Strings
Per confrontare le stringhe , la funzione deve confrontare ogni carattere in ogni stringa tra loro . Per fare questo, il programmatore utilizza i due puntatori ( str1 , str2 ) per spostare verso il basso ogni array :
while ( * str1 = '\\ 0' && * str1 == str2 * ! ) {
< p > str1 + + ; //sposta il puntatore del str1 stringa al carattere
str2 + + ; //fa lo stesso , str2
}
il ciclo while fa il ricerca : in primo luogo , se str1 colpi di un carattere di terminazione ( " \\ 0 ", che viene aggiunto alla fine di stringhe dal linguaggio C ) , allora il ciclo viene chiuso , perché quella stringa è fatto . In secondo luogo, se il valore di str1 ( * str1 ) non è uguale al valore di str2 ( * str2 ) , poi il ciclo si interrompe , perché le stringhe sono uguali .
Restituzione del risultato
< br
Strcmp > restituisce uno dei tre risultati : 0 ( se le stringhe sono uguali ) , 1 (se la prima è maggiore della seconda ) e -1 ( se la prima è minore della seconda ) :
< p > char a = * str1 ;
char b = * str2 ;
if ( a == b ) per
{ return 0; }
altro
{return ( ( a
Poiché i cicli si fermano quando c'è disuguaglianza o quando entrambi sono terminati , il risultato finirà come due caratteri uguali ( il '\\ 0' simbolo ) oi caratteri diseguali trovati.
completo del codice
il codice completo , quindi , è simile a questo ( e le implementazioni varierà , a seconda tecnica o di condizioni di sistema ) :
int strcmp ( const char * str1 , char * str2 ) {
char a , b ;
while ( ! * str1 = '\\ 0' && * str1 == * str2 ) {
str1 + + ; //sposta il puntatore della stringa str1 al successivo carattere
str2 + + ; //fa la stesso , str2
}
char a = * str1 ;
char b = * str2 ;
if ( a == b ) per
{ return 0; }
altro
{return ( ( a
< p > inserendo due stringhe , come ad esempio
char stringa1 [ 40 ] = " Questa è una stringa " ;
char stringa2 [ 40 ] = " Questa è una stringa " ;
int risultato = strcmp ( stringa1, stringa2 ) ;
tornerà 0 ;