Strengsammenligning C -programmering

Strengsammenligning C -programmering
En streng på C -språk er en rekke tegn, som avsluttes med nullkarakter (\ 0). Bruk av denne egenskapen blir 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 så 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 vil skrive en funksjon StringCompare () For å sammenligne strenger. Vi krysser strengene og sammenligner hvert tegn på strengen til vi kommer til slutten av en eller begge eller en uoverensstemmelse blir funnet. Hvis krysset er nådd til enden av begge strengene, samsvares strengene; Ellers blir strenger ikke -samsvarende.

01. /*UserDefinedFunction.C*/
02.
03. #inkludere
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. mens (str1 [i] == str2 [i])
10.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. gå i stykker;
1. 3. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. retur 0;
18. ellers
19. return -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [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. if (stringCompare (str1, str2) == 0)
34. printf ("strengene er like \ n");
35. ellers
36. printf ("strengene er ikke like \ n");
37.
38. retur 0; 39.

Her krysser vi strengene som bruker mens du er loop og en variabel Jeg. Når karakterer er like i samme posisjon av begge strengene, er verdien av Jeg økes med 1 (linje 13). Hvis tegn ikke er like (linje 09) eller vi når slutten av strengen (linje 11), så er mens loopen er en pause. Etter mens Loop, sjekker vi begge strengene er nådd til slutten eller ikke (linje 16). Hvis traversalen er nådd til enden av begge strengene, er strengene like ellers ikke.

Strengsammenligning ved bruk av innebygde bibliotekfunksjoner:

Følgende bibliotekfunksjoner kan brukes til strengsammenligning. Alle funksjonene er erklært i streng.h headerfil.

strcmp () funksjon:

Denne funksjonen sammenligner to strenger som er gitt med funksjonen.

Syntaks:

int strcmp (const char *str1, const char *str2)

Returverdi: Retur 0 hvis strengene er like. Returner et negativt heltall hvis ASCII -verdien til den første uovertrufne karakteren til den første strengen er mindre enn den andre strengen. Returner et positivt heltall hvis ASCII -verdien til den første uovertrufne karakteren til den første strengen er større enn den andre strengen. Noen systemer returnerer forskjellen på ASCII -verdien til første ikke -samsvarende karakter og noen systemer returnerer -1 hvis ASCII -verdien til den første uovertrufne karakteren til den første strengen er mindre enn den andre strengen og returnerer 1 hvis ASCII -verdien til den første uovertruffen karakter Den første strengen er større enn den andre strengen.

Eksempel Returverdi Forklaring
strcmp ( “Hello World”, ”Hello World” ) 0 To strenger er de samme.
strcmp ( “Hallo”, ”Hallo \ 0 verden” ) 0 Strenger sammenlignes til karakteren '\ 0'. Den første strengen avsluttes som standard med '\ 0', og den andre strengen inneholder '\ 0' -tegnet etter 'Hello'.
strcmp ( “Hallo \ 0 \ 0 \ 0”, ”Hallo \ 0 verden” ) 0 Strenger sammenlignes til karakteren '\ 0'.
strcmp ( “Hello World”, ”Hello World” ) Negativt heltall ASCII -verdien av den første uovertrufne karakteren til den første strengen ('H') er mindre enn den andre strengen ('H')
strcmp (“Hello World”, ”Hello World” ) Positivt heltall ASCII -verdien av den første uovertrufne karakteren til den første strengen ('H') er større enn den andre strengen ('H')

strncmp () funksjon:

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

Syntaks:

int strncmp (const char *str1, const char *str2, størrelse_t n)

Returverdi: Funksjonen kommer tilbake 0 Hvis den første n Karakterer av de to strengene er like; Ellers returnerer det negativt eller positivt heltall avhengig av tegnet på forskjellene mellom den første uoverensstemmede karakterens ASCII -verdi.

Eksempel Returverdi Forklaring
strncmp ( “Hello World”, ”Hello World”, 5 ) 0 De første 5 tegnene er de samme.
strncmp ( “Hei”, ”Hello \ 0 World”, 5 ) 0 De første 5 tegnene er de samme.
strncmp ( “Hallo \ 0 \ 0 \ 0”, ”Hello \ 0 World”, 8 ) 0 '\ 0' er etter de første 5 tegnene i begge strengene. Så sammenligningen stoppes etter 5 ikke 8.
strncmp ( “Hello World”, ”Hello World”, 5 ) Negativt heltall ASCII -verdien av den første uovertrufne karakteren til den første strengen ('H') er mindre enn den andre strengen ('H')

StrCaseCmp () Funksjon:

Denne funksjonen ligner på funksjonen strcmp (), Men her er ikke strengene saken følsomme.

Syntaks:

int strcasecmp (const char *str1, const char *str2)

Returverdi: Samme som strcmp (), Men strenger blir behandlet som case-in-følsom.

Eksempel Returverdi Forklaring
strcasecmp ( “Hello World”, ”Hello World” ) 0 To strenger er de samme.
strcasecmp ( “Hallo”, ”Hallo \ 0 verden” ) 0 Strenger sammenlignes til karakteren '\ 0'. Den første strengen avsluttes som standard med '\ 0', og den andre strengen inneholder '\ 0' -tegnet etter 'Hello'.
strcasecmp ( “Hello World”, ”Hello World” ) 0 Strenger er case-in-følsom. Så "Hello World" og "Hello World" er de samme.

strncaseCmp () funksjon:

Denne funksjonen ligner på funksjonen strncmp (), Men her er ikke strengene saken følsomme.

Syntaks:

int strncasecmp (const char *str1, const char *str2)

Returverdi: Samme som strncmp (), Når strenger behandles som case-in-følsomme.

Eksempel Returverdi Forklaring
strncasecmp ( “Hello World”, ”Hello World”, 5 ) 0 De første 5 tegnene er de samme.
strncasecmp ( “Hei”, ”Hello \ 0 World”, 5 ) 0 De første 5 tegnene er de samme.
strncasecmp ( “Hallo \ 0 \ 0 \ 0”, ”Hello \ 0 World”, 8 ) 0 '\ 0' er etter de første 5 tegnene i begge strengene. Så sammenligningen stoppes etter 5 ikke 8.
strncasecmp ( “Hello World”, ”Hello World”, 5 ) 0 Strenger er case-in-følsom. Så "hei" og "hei" er de samme.

memcmp () funksjon:

Denne funksjonen sammenligner to minneblokker byte av byte. Vi må passere to pekere i minneblokkene og antall byte som skal sammenlignes.

Syntaks:

int memcmp (const void *str1, const void *str2, size_t n)

Returverdi: Funksjonen returnerer 0 hvis de to minneblokkene (n byte) er like; Ellers returnerer det forskjellene mellom det første uoverensstemmede paret (byte tolkes som usignerte røyeobjekter, og deretter fremmet til int).

Eksempel Returverdi Forklaring
memcmp ( “Hello World”, ”Hello World”, 5 ) 0 De første 5 tegnene er de samme.
memcmp ( “Hallo \ 0 \ 0 \ 0”, ”Hello \ 0 World”, 8 ) Negativt heltall De første 6 tegnene er de samme, men den syvende karakteren er annerledes. Her er sammenligning ikke stoppet som strncmp () Når du får '\ 0' karakter.
memcmp ( “Hello World”, ”Hello World”, 11 ) Negativt heltall ASCII -verdien av den første uovertrufne karakteren til den første strengen ('H') er mindre enn den andre strengen ('H')

Eksempel:

Følgende er C -kodeeksemplet på alle funksjonene som er diskutert.

01. /*StringCompare.C*/
02.
03. #inkludere
04. #inkludere
05.
06. int main ()
07.
08. printf ("Strcmp (" Hello World "," Hello World ") => %d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" hallo "," hallo \\ 0 verden ") => %d \ n", strcmp ("hallo", "hallo \ 0 verden"));
10. printf ("Strcmp (" Hello World "," Hello World ") => %d \ n", strcmp ("Hello World", "Hello World"));
11. printf ("strcmp (" hallo \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ") => %d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Verden "));
12.
1. 3. printf ("\ n --------------- \ n");
14.
15. printf ("Strncmp (" Hello World "," Hello World ", 5) => %d \ n", strncmp ("Hello World", "Hello World", 5));
16. printf ("strncmp (" hallo "," hallo \\ 0 verden ", 5) => %d \ n", strncmp ("hallo", "hallo \ 0 verden", 5));
17. printf ("strncmp (" hallo \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hallo \ 0 verden ", 8));
18. printf ("Strncmp (" Hello World "," Hello World ", 5) => %d \ n", strncmp ("Hello World", "Hello World", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") => %d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" hallo "," hallo \\ 0 verden ") => %d \ n", strcasecmp ("hallo", "hallo \ 0 verden"));
24. printf ("strcasecmp (" Hello World "," Hello World ") => %d \ n", strcasecmp ("Hello World", "Hello World"));
25.
26. printf ("\ n --------------- \ n");
27.
28. printf ("strncasecmp (" Hello World "," Hello World ", 5) => %d \ n", strncasecmp ("Hello World", "Hello World", 5));
29. printf ("strncasecmp (" hallo "," hallo \\ 0 verden ", 5) => %d \ n", strncasecmp ("hallo", "hallo \ 0 verden", 5));
30. printf ("strncasecmp (" hallo \\ 0 \\ 0 \\ 0 "," hallo \\ 0 verden ", 8) => %d \ n", strncasecmp ("hallo \ 0 \ 0 \ 0", "Hello \ 0 verden ", 8));
31. printf ("strncasecmp (" Hello World "," Hello World ", 5) => %d \ n", strncasecmp ("Hello World", "Hello World", 5));
32.
33. printf ("\ n --------------- \ n");
34.
35. Printf ("Memcmp (" Hello World "," Hello World ", 5) => %D \ n", Memcmp ("Hello World", "Hello World", 5));
36. printf ("memcmp (" hallo \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) => %d \ n", memcmp ("hallo \ 0 \ 0 \ 0", "Hallo \ 0 verden ", 8));
37. printf ("memcmp (" Hello World "," Hello World ", 11) => %d \ n", memcmp ("Hello World", "Hello World", 11));
38.
39. retur 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 ulik strenger, men dette kan endres slik at den returnerer ASCII -verdien av uoverensstemmende karakter. Du kan bruke den i koden din, som passer best for deg.