C + + redan innehåller en funktion strängjämförelse - " strcmp ( ) " - som utför uppgiften att jämföra två strängar för jämställdhet . Den strcmp ( ) returnerar olika värden beroende på förhållandet mellan strängarna till varandra . Genomförandet av en strcmp ( ) funktionen skiljer mellan datorarkitekturer ( eller förblir under licens från olika leverantörer ) , men en programmerare kan reimplement de grundläggande funktionerna i koden för att se hur det fungerar . För att förstå funktionen måste emellertid programmeraren förstå hur strängar, arrayer och pekare arbetar i C och C + +. Strängar , arrayer och pekare
C , strängar är samlingar ( eller matriser ) av tecken . Till exempel ,
char string [ 10 ] ;
Som en samling av 10 tecken , " sträng " representerar en mening i C. Men matriser är faktiskt pekare , eller variabler som minnesadress . Matrisen " Strängen " representerar egentligen en pekare till det första objektet i minnet blocket , och programmeraren kan referera till andra objekt i arrayen genom denna pekare .
Definiera " strcmp ( ) "
Den grundläggande definitionen av en strcmp funktion kommer se ut ungefär så här :
int strcmp ( const char * str1 , const char * str2 ) ,
Per definition , en strängjämförelse funktion kommer att använda två tecken arrayer ( str1 , str2 ) . Eftersom matriser representerar pekare , kommer definitionen att ta två tecken pekare . Med dessa tips , kan programmeraren kontrollera varje objekt i en array mot en annan grupp . Först bör dock programmeraren deklarera två tecken variabler , vilket kommer att hålla de värden som finns i de två strängar :
int strcmp ( const char * str1 , const char * str2 ) {
röding a , b;
}
Gå igenom Strings
för att jämföra strängar , måste funktionen jämföra varje tecken i varje sträng till varandra. För att göra detta använder programmeraren de två pekare ( str1 , str2 ) för att flytta ner varje array :
medan ( * str1 = ' \\ 0 ' && * str1 == * str2 ! ) {
str1 + + , //flyttar pekaren av strängen str1 till nästa tecken
str2 + + , //gör samma sak , str2
}
medan loopen gör söka : första , om str1 träffar en avslutande karaktär ( " \\ 0 " , som läggs till i slutet av strängar av C-språket ) , då slingan avslutas , eftersom den strängen görs . Andra, om värdet av str1 ( * str1 ) inte är lika med värdet av str2 ( * str2 ) , då slingan stannar , eftersom strängarna är olika . Addera Returnera resultat
Strcmp returnerar ett av tre resultat: 0 ( om strängarna är lika ) , 1 ( om den första är större än den andra ) och -1 ( om den första är mindre än den andra ) :
char a = * str1 ,
char b = * str2 ;
if ( a == b ) katalog
{return 0 ;}
annars
{return ( ( a
eftersom slingorna sluta när det finns ojämlikhet eller när båda är färdiga , kommer resultatet att sluta som två lika tecken ( det ' \\ 0 ' symbol ) eller de ojämlika tecken hittades .
hela koden
hela koden , sedan , ser ut ungefär så här ( och implementeringar kommer att variera , beroende på teknik eller villkor systemet ) :
int strcmp ( const char * str1 , const char * str2 ) {
röding a , b;
samtidigt ( ! * str1 = ' \\ 0 ' && * str1 == * str2 ) {
str1 + + , //flyttar pekaren av strängen str1 till nästa tecken
str2 + + , //gör samma , str2
}
char a = * str1 ,
char b = * str2 ;
if ( a == b ) katalog
{return 0 ;}
annat
{return ( ( a
}
in två strängar , såsom
char sträng1 [ 40 ] = "Detta är sträng";
char sträng2 [ 40 ] = "Detta är sträng";
int resultatet = strcmp ( sträng1 , sträng2 ) ;
återkommer 0;