C Programiranje

Programiranje primerjave nizov C

Programiranje primerjave nizov C
Niz v jeziku C je niz znakov, ki se zaključi z ničelnim znakom (\ 0). Z uporabo te lastnosti se primerjajo nizi.

Dva niza lahko primerjamo na različne načine. V tej vadnici bomo najprej videli uporabniško določeno funkcijo za primerjavo dveh nizov, nato pa bomo videli nekaj vgrajenih funkcij knjižnice, s katerimi lahko zelo enostavno primerjamo dva niza. Torej, začnimo.

Primerjava nizov z uporabniško določeno funkcijo:

Napisali bomo funkcijo stringCompare () za primerjavo nizov. Prehodimo nize in primerjamo vsak znak niza, dokler ne pridemo do konca katerega koli ali pa najdemo oba ali neustrezno. Če je prehod dosežen na koncu obeh strun, se niza ujemajo; v nasprotnem primeru se nizi ne ujemajo.

01. / * userDefinedFunction.c * /
02.
03. #include
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. medtem ko (str1 [i] == str2 [i])
10.
11. če (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. odmor;
13. i ++;
14.
15.
16. če (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. vrnitev 0;
18. drugače
19. vrnitev -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Vnesite prvi niz:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Vnesite drugi niz:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("Strune so enake \ n");
35. drugače
36. printf ("Strune niso enake \ n");
37.
38. vrnitev 0; 39.

Tu prehodimo nize z uporabo zanke while in spremenljivke jaz. Ko so znaki enaki v istem položaju obeh nizov, je vrednost jaz se poveča za 1 (vrstica 13). Če znaki niso enaki (vrstica 09) ali dosežemo konec niza (vrstica 11), potem je zanka while prelom. Po zanki while preverimo, ali sta prečkanje niza dosežena do konca ali ne (vrstica 16). Če je prehod dosežen na koncu obeh nizov, so nizi enaki, sicer ne.

Primerjava nizov z uporabo vgrajenih funkcij knjižnice:

Naslednje funkcije knjižnice lahko uporabite za primerjavo nizov. Vse funkcije so deklarirane v vrvica.h datoteka glave.

funkcija strcmp ():

Ta funkcija primerja dva niza, predana funkciji.

Sintaksa:

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

Vrnjena vrednost: Vrnite 0, če so nizi enaki. Vrne negativno celo število, če je vrednost ASCII prvega neprimerljivega znaka prvega niza manjša od drugega niza. Vrne pozitivno celo število, če je vrednost ASCII prvega neprimerljivega znaka prvega niza večja od drugega niza. Nekateri sistemi vrnejo razliko v vrednosti ASCII prvega neujemajočega se znaka, nekateri pa vrnejo -1, če je vrednost ASCII prvega neusklajenega znaka prvega niza manjša od drugega niza, in vrnejo 1, če je vrednost ASCII prvega neusklajenega znaka prvi niz je večji od drugega.

Primer Vrnjena vrednost Pojasnilo
strcmp ( "Pozdravljen svet", "Pozdravljen svet" ) 0 Dve struni sta enaki.
strcmp ( "Pozdravljeni", "Pozdravljeni \ 0 Svet" ) 0 Strune se primerjajo do znaka '\ 0'. Prvi niz se privzeto konča z '\ 0', drugi niz pa za 'Hello' vsebuje znak '\ 0'.
strcmp ( "Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet" ) 0 Strune se primerjajo do znaka '\ 0'.
strcmp ( "Pozdravljen svet", "pozdravljen svet" ) Negativno celo število Vrednost ASCII prvega neprimerljivega znaka prvega niza ('H') je manjša od drugega niza ('h')
strcmp ("Zdravo svet", "zdravo svet" ) Pozitivno celo število Vrednost ASCII prvega neprimerljivega znaka prvega niza ('h') je večja od drugega niza ('H')

funkcija strncmp ():

Ta funkcija je podobna funkciji strcmp (), tu pa moramo določiti, koliko bajtov se primerja s posredovanjem dodatnega argumenta v funkcijo.

Sintaksa:

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

Vrnjena vrednost: Funkcija se vrne 0 če prvi n znaki obeh nizov so enaki; v nasprotnem primeru vrne negativno ali pozitivno celo število, odvisno od predznaka razlik med vrednostjo ASCII prvega neusklajenega znaka.

Primer Vrnjena vrednost Pojasnilo
strncmp ( "Pozdravljen svet", "Pozdravljen svet", 5 ) 0 Prvih 5 znakov je enakih.
strncmp ( "Pozdravljeni", "Pozdravljeni \ 0 Svet", 5 ) 0 Prvih 5 znakov je enakih.
strncmp ( "Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet", 8 ) 0 '\ 0' je za prvimi 5 znaki v obeh nizih. Torej, primerjava se ustavi po 5 ne 8.
strncmp ( “Hello World”, “hello World”, 5 ) Negativno celo število Vrednost ASCII prvega neprimerljivega znaka prvega niza ('H') je manjša od drugega niza ('h')

funkcija strcasecmp ():

Ta funkcija je podobna funkciji strcmp (), tu pa nizi ne razlikujejo med velikimi in malimi črkami.

Sintaksa:

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

Vrnjena vrednost: Enako kot strcmp (), vendar so nizi obravnavani kot upoštevanje velikih in malih črk.

Primer Vrnjena vrednost Pojasnilo
strcasecmp ( "Hello World", "Hello World" ) 0 Dve struni sta enaki.
strcasecmp ( "Pozdravljeni", "Pozdravljeni \ 0 Svet" ) 0 Strune se primerjajo do znaka '\ 0'. Prvi niz se privzeto konča z '\ 0', drugi niz pa za 'Hello' vsebuje znak '\ 0'.
strcasecmp ( "Pozdravljen svet", "pozdravljen svet" ) 0 Strune so upoštevanje velikih in malih črk. Torej, "Hello World" in "hello World" sta enaka.

funkcija strncasecmp ():

Ta funkcija je podobna funkciji strncmp (), tu pa nizi ne razlikujejo med velikimi in malimi črkami.

Sintaksa:

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

Vrnjena vrednost: Enako kot strncmp (), ko se nizi obravnavajo kot velika in mala črka.

Primer Vrnjena vrednost Pojasnilo
strncasecmp ( "Pozdravljen svet", "Pozdravljen svet", 5 ) 0 Prvih 5 znakov je enakih.
strncasecmp ( "Pozdravljeni", "Pozdravljeni \ 0 Svet", 5 ) 0 Prvih 5 znakov je enakih.
strncasecmp ( "Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet", 8 ) 0 '\ 0' je za prvimi 5 znaki v obeh nizih. Torej, primerjava se ustavi po 5 ne 8.
strncasecmp ( “Hello World”, “hello World”, 5 ) 0 Strune so upoštevanje velikih in malih črk. Torej, "Pozdravljeni" in "zdravo" sta enaki.

funkcija memcmp ():

Ta funkcija primerja dva bajta za bajtom pomnilniških blokov. Primerjati moramo dva kazalca pomnilniških blokov in število bajtov.

Sintaksa:

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

Vrnjena vrednost: Funkcija vrne 0, če sta dva pomnilniška bloka (n bajtov) so enaki; v nasprotnem primeru vrne razlike med prvim neusklajenim parom bajtov (bajti se interpretirajo kot nepodpisani predmeti char, nato se povišajo v int).

Primer Vrnjena vrednost Pojasnilo
memcmp ( "Pozdravljen svet", "Pozdravljen svet", 5 ) 0 Prvih 5 znakov je enakih.
memcmp ( "Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet", 8 ) Negativno celo število Prvih 6 znakov je enakih, 7. znak pa drugačnih. Tu se primerjava ni ustavila kot strncmp () pri pridobivanju znaka \ \ 0.
memcmp ( “Hello World”, “hello World”, 11 ) Negativno celo število Vrednost ASCII prvega neprimerljivega znaka prvega niza ('H') je manjša od drugega niza ('h')

Primer:

Sledi primer kode C vseh obravnavanih funkcij.

01. / * stringCompare.c * /
02.
03. #include
04. #include
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 (" Pozdravljen \\ 0 \\ 0 \\ 0 "," Pozdravljen \\ 0 Svet ") =>% d \ n", strcmp ("Pozdravljen \ 0 \ 0 \ 0", "Pozdravljen \ 0 Svet "));
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 (" Pozdravljeni \\ 0 \\ 0 \\ 0 "," Pozdravljeni \\ 0 Svet ", 8) =>% d \ n", strncmp ("Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet ", 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 (" Pozdravljeni \\ 0 \\ 0 \\ 0 "," Pozdravljeni \\ 0 Svet ", 8) =>% d \ n", strncasecmp ("Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet ", 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 (" Pozdravljeni \\ 0 \\ 0 \\ 0 "," Pozdravljeni \\ 0 Svet ", 8) =>% d \ n", memcmp ("Pozdravljeni \ 0 \ 0 \ 0", "Pozdravljeni \ 0 Svet ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. vrnitev 0; 40.

Zaključek:

V tej vadnici smo torej videli, kako lahko nize primerjamo na različne načine. Kot smo videli, funkcija stringCompare () vrne -1 za neenake nize, vendar jo je mogoče spremeniti tako, da vrne ASCII vrednost neusklajenega znaka. Uporabite ga lahko v svoji kodi, ki je najbolj primerna za vas.

Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...
Kako razviti igro na Linuxu
Pred desetletjem le malo uporabnikov Linuxa napoveduje, da bo njihov najljubši operacijski sistem nekoč priljubljena igralna platforma za komercialne ...