Strängjämförelse: C -programmering

String Comparison C Programming



En sträng på C -språket är en rad tecken som avslutas med ett nulltecken ( 0). Med denna egenskap strängar jämförs.







Två strängar kan jämföras på olika sätt. I den här självstudien kommer vi först att se en användardefinierad funktion för att jämföra två strängar, och sedan kommer vi att se några inbyggda biblioteksfunktioner som kan användas för att jämföra två strängar mycket enkelt. Så, låt oss komma igång.



Strängjämförelse med en användardefinierad funktion:

Vi kommer att skriva en funktion stringCompare () att jämföra strängar. Vi korsar strängarna och jämför varje tecken i strängen tills vi når slutet av någon eller båda eller en felanpassad hittas. Om transversalen nås till slutet av båda strängarna matchas strängarna; annars stämmer inte strängarna.



01./*userDefinedFunction.c*/
02.
03.#omfatta
04.
05.intstringCompare( rödingstr1[ ], rödingstr2[ ] )
06.{
07.inti=0;
08.
09. medan(str1[i] ==str2[i] )
10.
femton.
16.om(str1[i] == ' 0' &&str2[i] == ' 0' )
17.lämna tillbaka 0;
18.annan
19.lämna tillbaka -1;
tjugo.
tjugoett.}
22.
2. 3.
24.inthuvud()
25.{
26.rödingstr1[30],str2[30];
27.
28. printf ('Ange den första strängen:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Ange den andra strängen:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.om(stringCompare(str1,str2) == 0)
3. 4. printf ('Strängarna är lika n');
35.annan
36. printf ('Strängarna är inte lika n');
37.
38.lämna tillbaka 0; 39.}





Här går vi igenom strängarna med while loop och en variabel i . När tecken är lika i samma position för båda strängarna, värdet på i ökas med 1 (rad 13). Om tecken inte är lika (rad 09) eller om vi når slutet av strängen (rad 11), är while -slingan en paus. Efter stundslingan kontrollerar vi att båda strängpassagen nås till slutet eller inte (rad 16). Om transversalen nås till slutet av båda strängarna, är strängarna lika lika annars inte.

Strängjämförelse med inbyggda biblioteksfunktioner:

Följande biblioteksfunktioner kan användas för strängjämförelse. Alla funktioner anges i string.h rubrikfil.



strcmp () -funktion:

Denna funktion jämför två strängar som skickas till funktionen.

Syntax :

int strcmp (konst röding *str1, konst röding *str2)

Returvärde: Returnera 0 om strängarna är lika. Returnera ett negativt heltal om ASCII -värdet för det första oöverträffade tecknet i den första strängen är mindre än den andra strängen. Returnera ett positivt heltal om ASCII -värdet för det första oöverträffade tecknet i den första strängen är större än den andra strängen. Vissa system returnerar skillnaden för ASCII -värdet för första felaktiga tecknet och vissa system returnerar -1 om ASCII -värdet för det första omåttliga tecknet i den första strängen är mindre än den andra strängen och returnerar 1 om ASCII -värdet för det första oöverträffade tecknet för den första strängen är större än den andra strängen.

Exempel Returvärde Förklaring
strcmp ( Hej världen, hej världen ) 0 Två strängar är desamma.
strcmp ( Hej, Hej 0 Världen ) 0 Strängar jämförs till tecknet ' 0'. Den första strängen slutar som standard med ' 0', och den andra strängen innehåller ' 0' -tecknet efter 'Hej'.
strcmp ( Hej 0 0 0 ″, Hej 0 världen ) 0 Strängar jämförs till tecknet ' 0'.
strcmp ( Hej världen, hej världen ) Negativt heltal ASCII -värdet för det första oöverträffade tecknet i den första strängen ('H') är mindre än den andra strängen ('h')
strcmp ( hej världen, hej världen ) Positivt heltal ASCII -värdet för det första oöverträffade tecknet i den första strängen ('h') är större än den andra strängen ('H')

strncmp () -funktion:

Denna funktion liknar funktionen strcmp () , men här måste vi ange hur många byte som jämförs genom att skicka ett extra argument till funktionen.

Syntax:

int strncmp (konst röding *str1, konst röding *str2, storlek_tn)

Returvärde: Funktionen återkommer 0 om den första n tecken i de två strängarna är lika; annars returnerar det negativt eller positivt heltal beroende på tecknet på skillnaderna mellan det första felaktiga teckenets ASCII -värde.

Exempel Returvärde Förklaring
strncmp ( Hej världen, hej världen, 5 ) 0 De första 5 tecknen är desamma.
strncmp ( Hej, Hej 0 Värld, 5 ) 0 De första 5 tecknen är desamma.
strncmp ( Hej 0 0 0 ″, Hej 0 världen, 8 ) 0 ' 0' är efter de första 5 tecknen i båda strängarna. Så, jämförelsen stoppas efter 5 inte 8.
strncmp ( Hej världen, hej världen, 5 ) Negativt heltal ASCII -värdet för det första oöverträffade tecknet i den första strängen ('H') är mindre än den andra strängen ('h')

strcasecmp () -funktion:

Denna funktion liknar funktionen strcmp () , men här är strängarna inte skiftlägeskänsliga.

Syntax:

intstrcasecmp(konst röding *str1, konst röding *str2)

Returvärde: Samma som strcmp () , men strängar behandlas som fallet okänslig .

Exempel Returvärde Förklaring
strcasecmp ( Hej världen, hej världen ) 0 Två strängar är desamma.
strcasecmp ( Hej, Hej 0 Världen ) 0 Strängar jämförs till tecknet ' 0'. Den första strängen slutar som standard med ' 0', och den andra strängen innehåller ' 0' -tecknet efter 'Hej'.
strcasecmp ( Hej världen, hej världen ) 0 Strängar är fallet okänslig. Så Hello World och Hello World är desamma.

strncasecmp () -funktion:

Denna funktion liknar funktionen strncmp () , men här är strängarna inte skiftlägeskänsliga.

Syntax:

intstrncasecmp(konst röding *str1, konst röding *str2)

Returvärde: Samma som strncmp () , när strängar behandlas som skiftlägeskänsliga.

Exempel Returvärde Förklaring
strncasecmp ( Hej världen, hej världen, 5 ) 0 De första 5 tecknen är desamma.
strncasecmp ( Hej, Hej 0 Värld, 5 ) 0 De första 5 tecknen är desamma.
strncasecmp ( Hej 0 0 0 ″, Hej 0 världen, 8 ) 0 ' 0' är efter de första 5 tecknen i båda strängarna. Så, jämförelsen stoppas efter 5 inte 8.
strncasecmp ( Hej världen, hej världen, 5 ) 0 Strängar är fallet okänslig. Så hej och hej är samma sak.

memcmp () -funktion:

Denna funktion jämför två minnesblock byte för byte. Vi måste passera två pekare för minnesblocken och antalet byte att jämföra.

Syntax:

int memcmp (konst tomhet *str1, konst tomhet *str2, storlek_tn)

Returvärde: Funktionen returnerar 0 om de två minnesblocken ( n byte) är lika; annars returnerar det skillnaderna mellan det första paret som inte matchar byte (byte tolkas som osignerade teckenobjekt och sedan befordras till int).

Exempel Returvärde Förklaring
memcmp ( Hej världen, hej världen, 5 ) 0 De första 5 tecknen är desamma.
memcmp ( Hej 0 0 0 ″, Hej 0 världen, 8 ) Negativt heltal De första 6 tecknen är desamma, men sjunde tecknet är annorlunda. Här stannade jämförelsen inte som strncmp () när du får ' 0' tecken.
memcmp ( Hej världen, hej världen, 11 ) Negativt heltal ASCII -värdet för det första oöverträffade tecknet i den första strängen ('H') är mindre än den andra strängen ('h')

Exempel:

Följande är C -kodsexemplet på alla diskuterade funktioner.

01./*stringCompare.c*/
02.
03.#omfatta
04.#omfatta
05.
06.inthuvud()
07.{
08. printf ('strcmp ('Hej världen','Hej världen') => %d n', strcmp ( 'Hej världen','Hej världen' ));
09. printf ('strcmp ('Hej','Hej\0Värld') => %d n', strcmp ( 'Hej','Hej 0Värld' ));
10. printf ('strcmp ('Hej världen','Hej världen') => %d n', strcmp ( 'Hej världen','Hej världen' ) );
elva. printf ('strcmp ('Hej\0\0\0','Hej\0Värld') => %d n', strcmp ( 'Hej 0 0 0','Hej 0Värld' ));
12.
13. printf (' n--------------- n');
14.
femton. printf ('strncmp ('Hej världen','Hej världen', 5) => %d n', strncmp ( 'Hej världen','Hej världen',5 ));
16. printf ('strncmp ('Hej','Hej\0Värld', 5) => %d n', strncmp ( 'Hej','Hej 0Värld',5 ));
17. printf ('strncmp ('Hej\0\0\0','Hej\0Värld', 8) => %d n', strncmp ( 'Hej 0 0 0','Hej 0Värld',8 ));
18. printf ('strncmp ('Hej världen','Hej världen', 5) => %d n', strncmp ( 'Hej världen','Hej världen',5 ));
19.
tjugo. printf (' n--------------- n');
tjugoett.
22. printf ('strcasecmp ('Hej världen','Hej världen') => %d n',strcasecmp( 'Hej världen','Hej världen' ));
2. 3. printf ('strcasecmp ('Hej','Hej\0Värld') => %d n',strcasecmp( 'Hej','Hej 0Värld' ));
24. printf ('strcasecmp ('Hej världen','Hej världen') => %d n',strcasecmp( 'Hej världen','Hej världen' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Hej världen','Hej världen', 5) => %d n',strncasecmp( 'Hej världen','Hej världen',5 ) );
29. printf ('strncasecmp ('Hej','Hej\0Värld', 5) => %d n',strncasecmp( 'Hej','Hej 0Värld',5 ));
30. printf ('strncasecmp ('Hej\0\0\0','Hej\0Värld', 8) => %d n',strncasecmp( 'Hej 0 0 0','Hej 0Värld',8 ));
31. printf ('strncasecmp ('Hej världen','Hej världen', 5) => %d n',strncasecmp( 'Hej världen','Hej världen',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Hej världen','Hej världen', 5) => %d n', memcmp ( 'Hej världen','Hej världen',5 ) );
36. printf ('memcmp ('Hej\0\0\0','Hej\0Värld', 8) => %d n', memcmp ( 'Hej 0 0 0','Hej 0Värld',8 ));
37. printf ('memcmp ('Hej världen','Hej världen', 11) => %d n', memcmp ( 'Hej världen','Hej världen',elva ));
38.
39.lämna tillbaka 0; 40.}

Slutsats:

Så i denna handledning har vi sett hur strängar kan jämföras på olika sätt. Som vi har sett, returnerar stringCompare () -funktionen -1 för ojämlika strängar, men detta kan ändras så att det returnerar ASCII -värdet för felaktigt tecken. Du kan använda den i din kod, som är bäst lämpad för dig.