Strengsammenligning: C -programmering

String Comparison C Programming



En streng på C -språk er en rekke tegn, som avsluttes med et nulltegn ( 0). Ved bruk av denne egenskapen blir strenger sammenlignet.







To strenger kan sammenlignes på forskjellige måter. I denne opplæringen vil vi først se en brukerdefinert funksjon for å sammenligne to strenger, og deretter vil vi se noen innebygde bibliotekfunksjoner som kan brukes til å sammenligne to strenger veldig enkelt. Så, la oss komme i gang.



Strengsammenligning ved bruk av en brukerdefinert funksjon:

Vi skal skrive en funksjon stringCompare () å sammenligne strenger. Vi krysser strengene og sammenligner hvert tegn i strengen til vi når slutten av en eller begge eller en feil matchende er funnet. Hvis krysset er nådd til slutten av begge strengene, matches strengene; ellers er strengene feil.



01./*userDefinedFunction.c*/
02.
03.#inkludere
04.
05.intstringCompare( røyestr1[ ], røyestr2[ ] )
06.{
07.intJeg=0;
08.
09. samtidig som(str1[Jeg] ==str2[Jeg] )
10.
femten.
16.hvis(str1[Jeg] == ' 0' &&str2[Jeg] == ' 0' )
17.komme tilbake 0;
18.ellers
19.komme tilbake -1;
tjue.
tjueen.}
22.
2. 3.
24.inthoved-()
25.{
26.røyestr1[30],str2[30];
27.
28. printf ('Skriv inn den første strengen:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Skriv inn den andre strengen:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.hvis(stringCompare(str1,str2) == 0)
3. 4. printf ('Strengene er like n');
35.ellers
36. printf ('Strengene er ikke like n');
37.
38.komme tilbake 0; 39.}





Her krysser vi strengene ved å bruke while loop og en variabel Jeg . Når tegn er like i samme posisjon for begge strengene, verdien av Jeg økes med 1 (linje 13). Hvis tegnene ikke er like (linje 09) eller vi når slutten av strengen (linje 11), er while -løkken en pause. Etter mens -sløyfen sjekker vi at begge strengovergangene er nådd til slutten eller ikke (linje 16). Hvis traversal er nådd til slutten av begge strengene, er strengene like like ellers ikke.

Strengsammenligning ved hjelp av innebygde bibliotekfunksjoner:

Følgende biblioteksfunksjoner kan brukes til strengsammenligning. Alle funksjonene er deklarert i streng.h toppfil.



strcmp () -funksjon:

Denne funksjonen sammenligner to strenger som er overført til funksjonen.

Syntaks :

int strcmp (konst røye *str1, konst røye *str2)

Returverdi: Returner 0 hvis strengene er like. Returner et negativt heltall hvis ASCII -verdien til det første umatchede tegnet i den første strengen er mindre enn den andre strengen. Returner et positivt heltall hvis ASCII -verdien til det første umatchede tegnet i den første strengen er større enn den andre strengen. Noen systemer returnerer forskjellen på ASCII -verdien til det første feilmessige tegnet og noen systemer returnerer -1 hvis ASCII -verdien til den første umatchede karakteren i den første strengen er mindre enn den andre strengen og returnerer 1 hvis ASCII -verdien til det første umatchede tegnet til den første strengen er større enn den andre strengen.

Eksempel Returverdi Forklaring
strcmp ( Hei verden, hei verden ) 0 To strenger er like.
strcmp ( Hei, hei 0 verden ) 0 Strenger sammenlignes til tegnet ‘ 0’. Den første strengen ender som standard med ‘ 0’, og den andre strengen inneholder ‘ 0’ -tegnet etter ‘Hei’.
strcmp ( Hei 0 0 0 ″, Hei 0 verden ) 0 Strenger sammenlignes til tegnet ‘ 0’.
strcmp ( Hei verden, hei verden ) Negativt heltall ASCII -verdien til det første umatchede tegnet i den første strengen (‘H’) er mindre enn den andre strengen (‘h’)
strcmp ( hei verden, hei verden ) Positivt heltall ASCII -verdien til det første umatchede tegnet i den første strengen (‘h’) er større enn den andre strengen (‘H’)

strncmp () -funksjon:

Denne funksjonen ligner funksjonen strcmp () , men her må vi spesifisere hvor mange byte som sammenlignes ved å sende et ekstra argument til funksjonen.

Syntaks:

int strncmp (konst røye *str1, konst røye *str2, størrelse_tn)

Returverdi: Funksjonen returnerer 0 hvis den første n tegnene i de to strengene er like; Ellers returnerer det et negativt eller positivt heltall avhengig av tegnet på forskjellene mellom det første feilmessige tegnets ASCII -verdi.

Eksempel Returverdi Forklaring
strncmp ( Hei verden, hei verden, 5 ) 0 De første 5 tegnene er de samme.
strncmp ( Hei, hei 0 verden, 5 ) 0 De første 5 tegnene er de samme.
strncmp ( Hei 0 0 0 ″, Hei 0 verden, 8 ) 0 ‘ 0’ er etter de fem første tegnene i begge strengene. Så sammenligningen stoppes etter 5, ikke 8.
strncmp ( Hei verden, hei verden, 5 ) Negativt heltall ASCII -verdien til det første umatchede tegnet i den første strengen (‘H’) er mindre enn den andre strengen (‘h’)

strcasecmp () -funksjon:

Denne funksjonen ligner funksjonen strcmp () , men her er strengene ikke store og små bokstaver.

Syntaks:

intstrcasecmp(konst røye *str1, konst røye *str2)

Returverdi: Samme som strcmp () , men strenger blir behandlet som mellom store og små bokstaver .

Eksempel Returverdi Forklaring
strcasecmp ( Hei verden, hei verden ) 0 To strenger er like.
strcasecmp ( Hei, hei 0 verden ) 0 Strenger sammenlignes til tegnet ‘ 0’. Den første strengen ender som standard med ‘ 0’, og den andre strengen inneholder ‘ 0’ -tegnet etter ‘Hei’.
strcasecmp ( Hei verden, hei verden ) 0 Strenger er mellom store og små bokstaver. Så, Hei verden og hei verden er det samme.

strncasecmp () -funksjon:

Denne funksjonen ligner funksjonen strncmp () , men her er strengene ikke store og små bokstaver.

Syntaks:

intstrncasecmp(konst røye *str1, konst røye *str2)

Returverdi: Samme som strncmp () , når strenger behandles som store og små bokstaver.

Eksempel Returverdi Forklaring
strncasecmp ( Hei verden, hei verden, 5 ) 0 De første 5 tegnene er de samme.
strncasecmp ( Hei, hei 0 verden, 5 ) 0 De første 5 tegnene er de samme.
strncasecmp ( Hei 0 0 0 ″, Hei 0 verden, 8 ) 0 ‘ 0’ er etter de fem første tegnene i begge strengene. Så sammenligningen stoppes etter 5, ikke 8.
strncasecmp ( Hei verden, hei verden, 5 ) 0 Strenger er mellom store og små bokstaver. Så hei og hei er det samme.

memcmp () -funksjon:

Denne funksjonen sammenligner to minneblokker byte for byte. Vi må passere to pekere på minneblokkene og antall byte for å sammenligne.

Syntaks:

int memcmp (konst tomrom *str1, konst tomrom *str2, størrelse_tn)

Returverdi: Funksjonen returnerer 0 hvis de to minneblokkene ( n byte) er like; Ellers returnerer det forskjellene mellom det første paret som ikke samsvarer (byte tolkes som usignerte char -objekter, deretter forfremmet til int).

Eksempel Returverdi Forklaring
memcmp ( Hei verden, hei verden, 5 ) 0 De første 5 tegnene er de samme.
memcmp ( Hei 0 0 0 ″, Hei 0 verden, 8 ) Negativt heltall De seks første tegnene er de samme, men det syvende tegnet er annerledes. Her stoppet sammenligningen ikke som strncmp () når du får « 0» -tegn.
memcmp ( Hei verden, hei verden, 11 ) Negativt heltall ASCII -verdien til det første umatchede tegnet i den første strengen (‘H’) er mindre enn den andre strengen (‘h’)

Eksempel:

Følgende er C -kodeeksempelet på alle de diskuterte funksjonene.

01./*stringCompare.c*/
02.
03.#inkludere
04.#inkludere
05.
06.inthoved-()
07.{
08. printf ('strcmp ('Hei Verden','Hei Verden') => %d n', strcmp ( 'Hei Verden','Hei Verden' ));
09. printf ('strcmp ('Hallo','Hallo\0Verden') => %d n', strcmp ( 'Hallo','Hallo 0Verden' ));
10. printf ('strcmp ('Hei Verden','Hei Verden') => %d n', strcmp ( 'Hei Verden','Hei Verden' ) );
elleve. printf ('strcmp ('Hallo\0\0\0','Hallo\0Verden') => %d n', strcmp ( 'Hallo 0 0 0','Hallo 0Verden' ));
12.
1. 3. printf (' n--------------- n');
14.
femten. printf ('strncmp ('Hei Verden','Hei Verden', 5) => %d n', strncmp ( 'Hei Verden','Hei Verden',5 ));
16. printf ('strncmp ('Hallo','Hallo\0Verden', 5) => %d n', strncmp ( 'Hallo','Hallo 0Verden',5 ));
17. printf ('strncmp ('Hallo\0\0\0','Hallo\0Verden', 8) => %d n', strncmp ( 'Hallo 0 0 0','Hallo 0Verden',8 ));
18. printf ('strncmp ('Hei Verden','Hei Verden', 5) => %d n', strncmp ( 'Hei Verden','Hei Verden',5 ));
19.
tjue. printf (' n--------------- n');
tjueen.
22. printf ('strcasecmp ('Hei Verden','Hei Verden') => %d n',strcasecmp( 'Hei Verden','Hei Verden' ));
2. 3. printf ('strcasecmp ('Hallo','Hallo\0Verden') => %d n',strcasecmp( 'Hallo','Hallo 0Verden' ));
24. printf ('strcasecmp ('Hei Verden','Hei Verden') => %d n',strcasecmp( 'Hei Verden','Hei Verden' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Hei Verden','Hei Verden', 5) => %d n',strncasecmp( 'Hei Verden','Hei Verden',5 ) );
29. printf ('strncasecmp ('Hallo','Hallo\0Verden', 5) => %d n',strncasecmp( 'Hallo','Hallo 0Verden',5 ));
30. printf ('strncasecmp ('Hallo\0\0\0','Hallo\0Verden', 8) => %d n',strncasecmp( 'Hallo 0 0 0','Hallo 0Verden',8 ));
31. printf ('strncasecmp ('Hei Verden','Hei Verden', 5) => %d n',strncasecmp( 'Hei Verden','Hei Verden',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Hei Verden','Hei Verden', 5) => %d n', memcmp ( 'Hei Verden','Hei Verden',5 ) );
36. printf ('memcmp ('Hallo\0\0\0','Hallo\0Verden', 8) => %d n', memcmp ( 'Hallo 0 0 0','Hallo 0Verden',8 ));
37. printf ('memcmp ('Hei Verden','Hei Verden', 11) => %d n', memcmp ( 'Hei Verden','Hei Verden',elleve ));
38.
39.komme tilbake 0; 40.}

Konklusjon:

Så i denne opplæringen har vi sett hvordan strenger kan sammenlignes på forskjellige måter. Som vi har sett, returnerer stringCompare () -funksjonen -1 for ulike strenger, men denne kan endres slik at den returnerer ASCII -verdien til et ikke -tilpasset tegn. Du kan bruke den i koden din, som er best egnet for deg.