C Programmering

String Comparison C Programming

String Comparison C Programming
En streng i C-sprog er en række tegn, der afsluttes med et null tegn (\ 0). Brug af denne egenskabsstrenge sammenlignes.

To strenge kan sammenlignes på forskellige måder. I denne vejledning vil vi først se en brugerdefineret funktion til at sammenligne to strenge, og så vil vi se nogle indbyggede biblioteksfunktioner, som kan bruges til at sammenligne to strenge meget let. Så lad os komme i gang.

Strengsammenligning ved hjælp af en brugerdefineret funktion:

Vi skriver en funktion stringCompare () at sammenligne strenge. Vi krydser strengene og sammenligner hver karakter af strengen, indtil vi når slutningen af ​​en eller begge, eller der findes en uoverensstemmelse. Hvis traverseringen nås til slutningen af ​​begge strengene, matches strengene; Ellers er strengene ikke i overensstemmelse.

01. / * userDefinedFunction.c * /
02.
03. #omfatte
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. pause;
13. i ++;
14.
15.
16. hvis (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. returnere 0;
18. andet
19. retur -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Indtast den første streng:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Indtast den anden streng:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. hvis (stringCompare (str1, str2) == 0)
34. printf ("Strengene er lige \ n");
35. andet
36. printf ("Strengene er ikke lige \ n");
37.
38. returnere 0; 39.

Her krydser vi strengene ved hjælp af mens loop og en variabel jeg. Når tegn er ens i samme position af begge strenge, er værdien af jeg er forøget med 1 (linje 13). Hvis tegn ikke er ens (linje 09), eller når vi når slutningen af ​​strengen (linje 11), er while-sløjfen en pause. Efter while-sløjfen kontrollerer vi, at begge streng-traversaler nås til slutningen eller ej (linje 16). Hvis gennemgangen nås til slutningen af ​​begge strenge, så er strengene ens ellers ikke.

Strengsammenligning ved hjælp af indbyggede biblioteksfunktioner:

Følgende biblioteksfunktioner kan bruges til strengesammenligning. Alle funktionerne er angivet i snor.h header-fil.

strcmp () funktion:

Denne funktion sammenligner to strenge, der sendes til funktionen.

Syntaks:

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

Returværdi: Returner 0, hvis strengene er ens. Returner et negativt heltal, hvis ASCII-værdien for det første umatchede tegn i den første streng er mindre end den anden streng. Returner et positivt heltal, hvis ASCII-værdien for det første umatchede tegn i den første streng er større end den anden streng. Nogle systemer returnerer forskel på ASCII-værdien for første uoverensstemmende karakter, og nogle systemer returnerer -1, hvis ASCII-værdien for den første umatchede karakter i den første streng er mindre end den anden streng, og returnerer 1, hvis ASCII-værdien for den første umatchede karakter af den første streng er større end den anden streng.

Eksempel Returneringsværdi Forklaring
strcmp ( "Hello World", "Hello World" ) 0 To strenge er ens.
strcmp ( “Hej”, ”Hej \ 0 Verden” ) 0 Strenge sammenlignes indtil tegnet '\ 0'. Den første streng slutter som standard med '\ 0', og den anden streng indeholder tegnet '\ 0' efter 'Hej'.
strcmp ( “Hej \ 0 \ 0 \ 0", ”Hej \ 0 Verden" ) 0 Strenge sammenlignes indtil tegnet '\ 0'.
strcmp ( "Hej verden", "hej verden" ) Negativt heltal ASCII-værdien af ​​det første uovertrufne tegn i den første streng ('H') er mindre end den anden streng ('h')
strcmp (“Hej verden”, ”hej verden” ) Positivt heltal ASCII-værdien for det første uovertrufne tegn i den første streng ('h') er større end den anden streng ('H')

strncmp () funktion:

Denne funktion svarer til funktionen strcmp (), men her skal vi specificere, hvor mange byte der sammenlignes ved at sende et ekstra argument til funktionen.

Syntaks:

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

Returværdi: Funktionen vender tilbage 0 hvis den første n tegnene i de to strenge er ens; Ellers returnerer det negativt eller positivt heltal afhængigt af tegnet på forskellene mellem det første uoverensstemmende tegns ASCII-værdi.

Eksempel Returneringsværdi Forklaring
strncmp ( "Hello World", "Hello World", 5 ) 0 De første 5 tegn er ens.
strncmp ( "Hej", "Hej \ 0 Verden", 5 ) 0 De første 5 tegn er ens.
strncmp ( “Hej \ 0 \ 0 \ 0", ”Hej \ 0 Verden", 8 ) 0 '\ 0' er efter de første 5 tegn i begge strenge. Så sammenligning stoppes efter 5 ikke 8.
strncmp ( "Hej verden", "hej verden", 5 ) Negativt heltal ASCII-værdien for det første uovertrufne tegn i den første streng ('H') er mindre end den anden streng ('h')

strcasecmp () funktion:

Denne funktion svarer til funktionen strcmp (), men her er strengene ikke store og små bogstaver.

Syntaks:

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

Returværdi: Samme som strcmp (), men strenge behandles som store og små bogstaver.

Eksempel Returneringsværdi Forklaring
strcasecmp ( "Hello World", "Hello World" ) 0 To strenge er ens.
strcasecmp ( “Hej”, ”Hej \ 0 Verden” ) 0 Strenge sammenlignes indtil tegnet '\ 0'. Den første streng slutter som standard med '\ 0', og den anden streng indeholder tegnet '\ 0' efter 'Hej'.
strcasecmp ( "Hej verden", "hej verden" ) 0 Strenge er store og små bogstaver. Så "Hello World" og "Hello World" er de samme.

strncasecmp () funktion:

Denne funktion svarer til funktionen strncmp (), men her er strengene ikke store og små bogstaver.

Syntaks:

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

Returværdi: Samme som strncmp (), når strenge behandles som store og små bogstaver.

Eksempel Returneringsværdi Forklaring
strncasecmp ( "Hello World", "Hello World", 5 ) 0 De første 5 tegn er ens.
strncasecmp ( "Hej", "Hej \ 0 Verden", 5 ) 0 De første 5 tegn er ens.
strncasecmp ( “Hej \ 0 \ 0 \ 0", ”Hej \ 0 Verden", 8 ) 0 '\ 0' er efter de første 5 tegn i begge strenge. Så sammenligning stoppes efter 5 ikke 8.
strncasecmp ( "Hej verden", "hej verden", 5 ) 0 Strenge er store og små bogstaver. Så "Hej" og "hej" er de samme.

memcmp () funktion:

Denne funktion sammenligner to hukommelsesblokke byte for byte. Vi skal videregive to markører til hukommelsesblokkene og antallet af bytes, der skal sammenlignes.

Syntaks:

int memcmp (const ugyldig * str1, const ugyldig * str2, størrelse_t n)

Returværdi: Funktionen returnerer 0, hvis de to hukommelsesblokke (n bytes) er ens; Ellers returnerer det forskellene mellem det første uoverensstemmende par byte (bytes fortolkes som usignerede char-objekter og promoveres derefter til int).

Eksempel Returneringsværdi Forklaring
memcmp ( "Hello World", "Hello World", 5 ) 0 De første 5 tegn er ens.
memcmp ( “Hej \ 0 \ 0 \ 0", ”Hej \ 0 Verden", 8 ) Negativt heltal De første 6 tegn er ens, men det 7. tegn er anderledes. Her er sammenligningen ikke stoppet som strncmp () når du får '\ 0' karakter.
memcmp ( ”Hej verden”, ”hej verden”, 11 ) Negativt heltal ASCII-værdien af ​​det første uovertrufne tegn i den første streng ('H') er mindre end den anden streng ('h')

Eksempel:

Følgende er C-kodeeksemplet på alle de diskuterede funktioner.

01. / * stringCompare.c * /
02.
03. #omfatte
04. #omfatte
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 "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Hej \\ 0 \\ 0 \\ 0 "," Hej \\ 0 Verden ") =>% d \ n", strcmp ("Hej \ 0 \ 0 \ 0", "Hej \ 0 Verden "));
12.
13. 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 (" Hej \\ 0 \\ 0 \\ 0 "," Hej \\ 0 Verden ", 8) =>% d \ n", strncmp ("Hej \ 0 \ 0 \ 0", "Hej \ 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 (" Hello "," Hello \\ 0 World ") =>% d \ n", strcasecmp ("Hello", "Hello \ 0 World"));
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 (" 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 Verden ", 8));
31. printf ("strncasecmp (" Hello World "," hej verden ", 5) =>% d \ n", strncasecmp ("Hello World", "hej 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 Verden ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. returnere 0; 40.

Konklusion:

Så i denne vejledning har vi set, hvordan strenge kan sammenlignes på forskellige måder. Som vi har set, returnerer stringCompare () -funktionen -1 for ulige strenge, men dette kan ændres, så den returnerer ASCII-værdien af ​​det uoverensstemmende tegn. Du kan bruge den i din kode, som passer bedst til dig.

Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...
Gratis og open source-spilmotorer til udvikling af Linux-spil
Denne artikel dækker en liste over gratis og open source-spilmotorer, der kan bruges til at udvikle 2D- og 3D-spil på Linux. Der er mange sådanne spil...
Shadow of the Tomb Raider til Linux-vejledning
Shadow of the Tomb Raider er den tolvte tilføjelse til Tomb Raider-serien - en action-adventure-spilfranchise oprettet af Eidos Montreal. Spillet blev...