C + + indeholder allerede en streng sammenligning funktion - " strcmp () " - som udfører opgaven med at sammenligne to strenge for ligestilling . Den strcmp ( )-funktionen giver forskellige værdier afhængigt af forholdet mellem strengene til hinanden. Gennemførelsen af et strcmp () funktion er forskellig mellem edb arkitekturer ( eller forbliver under licens fra forskellige leverandører ), men en programmør kan reimplement den grundlæggende funktionalitet af koden for at se, hvordan det virker. At forstå funktionen skal dog programmøren forstå, hvordan strenge, arrays og pointers arbejde i C og C + + . Strygere , arrays og Pointers
C , strygere er samlinger (eller arrays ) af tegn . For eksempel [10]
char string ,
p Som en vifte af 10 tegn , "streng " repræsenterer en sætning i C. Men arrays er faktisk pegepinde, eller variabler , der henviser til memory -adresse . Array "streng" repræsenterer faktisk en pointer til det første element i hukommelsen blok, og programmøren kan referere til andre emner i matrixen gennem denne pointer.
Definition " strcmp ()" < br >
grundlæggende definition af en strcmp funktion vil ligne dette : Hej
int strcmp ( const char * str1 , const char * str2 )
Pr. definition en string sammenligning funktion vil udnytte to tegndatatabeller ( str1 , str2 ) . Da arrays repræsenterer pegepinde , vil definitionen tage to tegn pointere. Med disse pejlemærker , kan programmøren kontrollere hver enkelt element i en matrix imod en anden array. Først bør dog programmøren erklære to tegn variabler , som vil holde værdierne i de to strenge : Hej
int strcmp ( const char * str1 , const char * str2 ) {
char a, b ,
}
overkørsel af Strings
for at kunne sammenligne strengene skal funktionen sammenligne de enkelte tegn i hver streng til hinanden . For at gøre dette , programmøren bruger to pegepinde ( str1 , str2 ) for at flytte ned hvert array : Hej
while ( * str1 = '\\ 0' && * str1 == * str2 !) {
< p> str1 + + //flytter markøren af strengen str1 til næste tegn
str2 + + //gør det samme , str2
}
mens løkken gør søger : først, hvis str1 hits en afslutning tegn ( "\\ 0 ", som er vedlagt i slutningen af strengene af C-sprog ), så løkken afsluttes, fordi denne streng er færdig. For det andet, hvis værdien af str1 ( * str1 ) ikke gør lige værdien af str2 ( * str2 ), så løkken stopper , fordi strengene er ulige .
Returnering af Result
< br >
strCmp returnerer et af tre resultater : 0 ( hvis strengene er ens ) , 1 (hvis den første er større end den anden ) og -1 ( hvis den første er mindre end den anden ) :
< p> char a = * str1 ,
char b = * str2 ,
if ( a == b),
{return 0 ;}
ellers
{return ( ( a < b ) -1 : ? 1 );}
Siden sløjfer stopper , når der er ulighed eller når begge er færdig , vil resultatet ender som to lige tegn ( den '\\ 0 ' symbol) eller ulige tegn fundet.
Complete Code
komplet regelsæt , så ligner denne (og implementeringer vil variere , afhængigt af teknik eller systemets forhold) : Hej
int strcmp ( const char * str1 , const char * str2 ) {
char a, b ,
while ( ! * str1 = '\\ 0' && * str1 == * str2 ) {
str1 + + //flytter markøren af strengen str1 til næste tegn
str2 + + //gør samme , str2
}
char a = * str1 ,
char b = * str2 ,
if ( a == b )
{return 0 ;}
ellers
{return ( ( a < b ) -1 : ? 1 );}
}
< p > indtastning to strenge , såsom
char streng1 [40] = "Dette er strengen "
char streng2 [40] = "Dette er strengen "
int result = strcmp ( streng1 , streng2 ),
vil returnere 0 ,