C Programmering

String Comparison C Programming

String Comparison C Programming
En streng i C-språk er en rekke tegn, som avsluttes med et nulltegn (\ 0). Ved å bruke denne egenskapstrengene sammenlignes.

To strenger kan sammenlignes på forskjellige måter. I denne veiledningen vil vi først se en brukerdefinert funksjon for å sammenligne to strenger, og så vil vi se noen innebygde biblioteksfunksjoner 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 hvis det ikke blir funnet samsvar. Hvis traverseringen er nådd til slutten av begge strengene, blir strengene matchet; Ellers samsvarer ikke strengene.

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. hvis (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. gå i stykker;
1. 3. i ++;
14.
15.
16. hvis (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. retur 0;
18. ellers
19. retur -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. hvis (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 ved hjelp av mens loop og en variabel Jeg. Når tegn er like i samme posisjon som begge strengene, er verdien av Jeg økes med 1 (linje 13). Hvis tegn ikke er like (linje 09) eller når vi når slutten av strengen (linje 11), er mens loop er en pause. Etter while-sløyfen, sjekker vi at begge strengovergangene er nådd til slutten eller ikke (linje 16). Hvis traverseringen er nådd til slutten av begge strengene, er strengene like ellers ikke.

Strengsammenligning ved bruk av innebygde biblioteksfunksjoner:

Følgende biblioteksfunksjoner kan brukes til sammenligning av strenger. Alle funksjonene er deklarert i streng.h topptekstfil.

strcmp () -funksjon:

Denne funksjonen sammenligner to strenger som sendes til funksjonen.

Syntaks:

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

Returverdi: Returner 0 hvis strengene er like. Returner et negativt heltall hvis ASCII-verdien til den første uovertruffen karakteren til den første strengen er mindre enn den andre strengen. Returner et positivt heltall hvis ASCII-verdien til den første uovertruffen karakteren til den første strengen er større enn den andre strengen. Noen systemer returnerer forskjell på ASCII-verdien til den første uoverensstemmende karakteren, og noen systemer returnerer -1 hvis ASCII-verdien til den første uovertruffen karakteren til den første strengen er mindre enn den andre strengen, og returnerer 1 hvis ASCII-verdien til den første uovertruffen karakteren til den første strengen er større enn den andre strengen.

Eksempel Returverdi Forklaring
strcmp ( "Hello World", "Hello World" ) 0 To strenger er like.
strcmp ( "Hei", "Hei \ 0 Verden" ) 0 Strenger sammenlignes til tegnet '0'. Den første strengen slutter som standard med '\ 0', og den andre strengen inneholder tegnet '\ 0' etter 'Hei'.
strcmp ( “Hei \ 0 \ 0 \ 0", ”Hei \ 0 Verden” ) 0 Strenger sammenlignes til tegnet '0'.
strcmp ( "Hello World", "hallo World" ) Negativt heltall ASCII-verdien til den første uovertruffen karakteren til den første strengen ('H') er mindre enn den andre strengen ('h')
strcmp (“Hei verden”, ”hei verden” ) Positivt heltall ASCII-verdien til den første uovertruffen 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 å sende et ekstra argument til funksjonen.

Syntaks:

int strncmp (const char * str1, con char char * str2, size_t n)

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

Eksempel Returverdi Forklaring
strncmp ( “Hello World”, “Hello World”, 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 ( “Hello World”, “hallo World”, 5 ) Negativt heltall ASCII-verdien til den første uovertruffen 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 strengene ikke store og små bokstaver.

Syntaks:

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

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

Eksempel Returverdi Forklaring
strcasecmp ( "Hello World", "Hello World" ) 0 To strenger er like.
strcasecmp ( “Hei”, “Hei \ 0 Verden” ) 0 Strenger sammenlignes til tegnet '0'. Den første strengen slutter som standard med '\ 0', og den andre strengen inneholder tegnet '\ 0' etter 'Hei'.
strcasecmp ( "Hello World", "hallo World" ) 0 Strenger er store og små bokstaver. Så "Hello World" og "Hello World" er de samme.

strncasecmp () -funksjon:

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

Syntaks:

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

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

Eksempel Returverdi Forklaring
strncasecmp ( “Hello World”, “Hello World”, 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 ( “Hello World”, “hallo World”, 5 ) 0 Strenger er store og små bokstaver. Så, "Hei" og "hei" er de samme.

memcmp () -funksjon:

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

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 den forskjellene mellom det første uoverensstemmende byteparet (byte tolkes som usignerte tegnobjekter, og deretter promoteres til int).

Eksempel Returverdi Forklaring
memcmp ( “Hello World”, “Hello World”, 5 ) 0 De første 5 tegnene er de samme.
memcmp ( “Hei \ 0 \ 0 \ 0", ”Hei \ 0 Verden”, 8 ) Negativt heltall De første 6 tegnene er de samme, men de 7. tegnene er forskjellige. Her stoppet ikke sammenligningen som strncmp () når du får '\ 0' karakter.
memcmp ( “Hello World”, “hallo World”, 11 ) Negativt heltall ASCII-verdien til den første uovertruffen 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 (" Hello "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello", "Hello \ 0 World"));
10. printf ("strcmp (" Hello World "," hallo verden ") =>% d \ n", strcmp ("Hello World", "hallo verden"));
11. printf ("strcmp (" Hello \\ 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 (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncmp ("Hello", "Hello \ 0 World", 5));
17. printf ("strncmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
18. printf ("strncmp (" Hello World "," hallo verden ", 5) =>% d \ n", strncmp ("Hello World", "hallo verden", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcasecmp ("Hello", "Hello \ 0 World"));
24. printf ("strcasecmp (" Hello World "," hallo verden ") =>% d \ n", strcasecmp ("Hello World", "hallo verden"));
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 (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncasecmp ("Hello", "Hello \ 0 World", 5));
30. printf ("strncasecmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
31. printf ("strncasecmp (" Hello World "," hallo verden ", 5) =>% d \ n", strncasecmp ("Hello World", "hallo verden", 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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", memcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
37. printf ("memcmp (" Hello World "," hallo verden ", 11) =>% d \ n", memcmp ("Hello World", "hallo verden", 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 ulike strenger, men dette kan modifiseres slik at den returnerer ASCII-verdien av feil samsvar. Du kan bruke den i koden din, som passer best for deg.

Nyttige verktøy for Linux-spillere
Hvis du liker å spille spill på Linux, er sjansen stor for at du har brukt apper og verktøy som Wine, Lutris og OBS Studio for å forbedre spilloppleve...
HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...