C + + allerede inneholder en streng sammenligning funksjon - " strcmp ( ) " - som utfører oppgaven med å sammenligne to strenger for likestilling . Den strcmp ( )-funksjonen returnerer forskjellige verdier avhengig av forholdet av strengene til hverandre. Gjennomføringen av en strcmp ( )-funksjonen skiller mellom datamaskinarkitekturer ( eller forblir under lisens fra forskjellige leverandører ) , men en programmerer kan reimplement den grunnleggende funksjonaliteten av koden for å se hvordan det fungerer . For å forstå funksjonen , må imidlertid programmerer forstå hvordan strenger, matriser og pekere jobbe i C og C + + . Strenger, Arrays og pekere
I C , strenger er samlinger ( eller arrays) av tegn . For eksempel , etter
røye string [ 10 ];
p Som en rekke av 10 tegn , "streng" representerer en setning i C. Men arrays er faktisk pekere, eller variabler som refererer til minne adresse . Matrisen "streng " representerer faktisk en peker til det første elementet i minnet blokken , og programmereren kan referere til de andre elementene i matrisen gjennom denne pekeren .
Definere " strcmp ( ) "
Den grunnleggende definisjonen av en strcmp funksjonen vil se omtrent slik ut : en
int strcmp ( const char * str1 , const char * str2 ) ;
Per definisjon er et string sammenligning funksjonen vil bruke to tegn arrays ( str1 , str2 ) . Siden matriser representerer pekere vil definisjonen ta to tegn pekere. Med disse pekerne , kan programmereren sjekke hvert element i en matrise mot en annen array. Men først bør programmereren erklære to tegn variabler , som vil holde de verdiene som finnes i de to strenger : en
int strcmp ( const char * str1 , const char * str2 ) {
røye a, b;
}
Traversering Strings
for å sammenligne strengene , må funksjonen sammenligne hvert tegn i hver streng til hverandre . For å gjøre dette , bruker programmerer de to pekere ( str1 , str2 ) for å gå ned hver matrise : en
while ( * str1 = ' \\ 0 ' && * str1 == * str2 ! ) {
< p> str1 + + ; //flytter pekeren av strengen str1 til neste tegn
str2 + +; //gjør det samme , str2
}
mens loop gjør søker : først , hvis str1 treff en avslutning karakter ( "\\ 0 " som er lagt til på slutten av strenger av C-språk ) , da løkken avsluttes, fordi at strengen er gjort. Sekund, dersom verdien av str1 ( * str1 ) ikke lik verdien av str2 ( * str2 ) , deretter løkken stopper , fordi strengene er ulik.
Returnere resultatet
strCmp returnerer en av tre resultater : 0 ( hvis strengene er like) , 1 ( hvis den første er større enn den andre ) og -1 ( hvis den første er mindre enn den andre ) : en < p> røye a = * str1 ;
røye b = * str2 ;
if ( a == b )
{return 0 ;}
annet
{return ( ( a < b ) -1 : 1 ) ;}
Siden løkker stoppe når det er ulikhet eller når begge er ferdig , vil resultatet ende opp som to like tegn ( den '\\ 0 ' symbol) eller den skjeve tegn funnet .
komplett code
komplette koden , da, ser slik ut (og implementeringer vil variere , avhengig av teknikk eller systembetingelser ) : en
int strcmp ( const char * str1 , const char * str2 ) {
røye a, b;
while ( ! * str1 = ' \\ 0 ' && * str1 == * str2 ) {
str1 + + ; //flytter pekeren på strengen str1 til neste tegn
str2 + +; //gjør samme, str2
}
røye a = * str1 ;
røye b = * str2 ;
if ( a == b )
{return 0 ;}
annet
{return ( ( a < b ) -1 : 1 ) ;}
}
< p > inn to strenger , for eksempel
røye streng1 [ 40 ] = "Dette er streng" ;
røye string2 [ 40 ] = "Dette er streng" ;
int resultat = strcmp ( streng1 , string2 ) ;
vil returnere 0;