C Programiranje

Programiranje usporedbe nizova C

Programiranje usporedbe nizova C
Niz u jeziku C niz je znakova koji se završava nulom (\ 0). Pomoću ovog svojstva uspoređuju se nizovi.

Dvije se žice mogu usporediti na razne načine. U ovom uputstvu prvo ćemo vidjeti korisnički definiranu funkciju za usporedbu dva niza, a zatim ćemo vidjeti neke ugrađene funkcije knjižnice koje se mogu koristiti za vrlo lako uspoređivanje dva niza. Pa, krenimo.

Usporedba nizova pomoću korisnički definirane funkcije:

Napisat ćemo funkciju stringCompare () za usporedbu nizova. Prelazimo nizovima i uspoređujemo svaki znak niza dok ne dođemo do kraja bilo kojeg ili se pronađu oba ili jedan neusklađeni. Ako se prijelaz dosegne do kraja obje žice, tada se žice podudaraju; u suprotnom, nizovi se ne podudaraju.

01. / * userDefinedFunction.c * /
02.
03. #include
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. dok (str1 [i] == str2 [i])
10.
11. ako (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. pauza;
13. i ++;
14.
15.
16. ako (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. return 0;
18. drugo
19. povratak -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Unesite prvi niz:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Unesite drugi niz:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("Nizovi su jednaki \ n");
35. drugo
36. printf ("Nizovi nisu jednaki \ n");
37.
38. return 0; 39.

Ovdje prelazimo nizovima pomoću petlje while i varijable ja. Kada su znakovi jednaki u istom položaju oba niza, vrijednost ja uvećava se za 1 (redak 13). Ako znakovi nisu jednaki (redak 09) ili dođemo do kraja niza (redak 11), tada je petlja while prekid. Nakon while petlje provjeravamo jesu li oba prijelaza niza došla do kraja ili ne (redak 16). Ako se prijelaz dosegne na kraj obje žice, tada su žice jednake, inače ne.

Usporedba nizova pomoću ugrađenih funkcija knjižnice:

Sljedeće funkcije knjižnice mogu se koristiti za usporedbu nizova. Sve su funkcije deklarirane u niz.h datoteka zaglavlja.

funkcija strcmp ():

Ova funkcija uspoređuje dva niza prenesena u funkciju.

Sintaksa:

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

Povratna vrijednost: Vrati 0 ako su nizovi jednaki. Vrati negativan cijeli broj ako je ASCII vrijednost prvog neusklađenog znaka prvog niza manja od drugog niza. Vrati pozitivan cijeli broj ako je ASCII vrijednost prvog neusklađenog znaka prvog niza veća od drugog niza. Neki sustavi vraćaju razliku ASCII vrijednosti prvog neusklađenog znaka, a neki sustavi vraćaju -1 ako je ASCII vrijednost prvog neusklađenog znaka prvog niza manja od drugog niza i vraćaju 1 ako je ASCII vrijednost prvog neusklađenog znaka prvi je niz veći od drugog niza.

Primjer Povratna vrijednost Obrazloženje
strcmp ( "Zdravo svijetu", "Zdravo svijetu" ) 0 Dvije žice su iste.
strcmp ( “Pozdrav”, “Pozdrav \ 0 Svijet” ) 0 Nizovi se uspoređuju do znaka '\ 0'. Prvi niz prema zadanim postavkama završava s "\ 0", a drugi niz sadrži znak "\ 0" nakon "Hello".
strcmp ( "Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijete" ) 0 Nizovi se uspoređuju do znaka '\ 0'.
strcmp ( "Zdravo Svijete", "Zdravo Svijete" ) Negativni cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')
strcmp (“Zdravo Svijete”, “Zdravo Svijete” ) Pozitivni cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('h') veća je od drugog niza ('H')

funkcija strncmp ():

Ova je funkcija slična funkciji strcmp (), ali ovdje moramo odrediti koliko se bajtova uspoređuje prosljeđivanjem dodatnog argumenta funkciji.

Sintaksa:

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

Povratna vrijednost: Funkcija se vraća 0 ako je prva n znakovi dviju žica su jednaki; u suprotnom, vraća negativan ili pozitivan cijeli broj, ovisno o predznaku razlike između vrijednosti ASCII prvog neusklađenog znaka.

Primjer Povratna vrijednost Obrazloženje
strncmp ( “Pozdrav svijetu”, “Pozdrav svijetu”, 5 ) 0 Prvih 5 znakova je isto.
strncmp ( “Zdravo”, “Zdravo \ 0 Svijetu”, 5 ) 0 Prvih 5 znakova je isto.
strncmp ( “Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijete", 8 ) 0 '\ 0' nalazi se nakon prvih 5 znakova u oba niza. Dakle, usporedba se zaustavlja nakon 5, a ne 8.
strncmp ( „Pozdrav svijete“, „pozdrav svijetu“, 5 ) Negativni cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')

funkcija strcasecmp ():

Ova je funkcija slična funkciji strcmp (), ali ovdje nizovi ne razlikuju velika i mala slova.

Sintaksa:

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

Povratna vrijednost: Isto kao strcmp (), ali se žice tretiraju kao velika i mala slova.

Primjer Povratna vrijednost Obrazloženje
strcasecmp ( "Zdravo svijetu", "Zdravo svijetu" ) 0 Dvije žice su iste.
strcasecmp ( “Zdravo”, “Zdravo \ 0 Svijetu” ) 0 Nizovi se uspoređuju do znaka '\ 0'. Prvi niz prema zadanim postavkama završava s "\ 0", a drugi niz sadrži znak "\ 0" nakon "Hello".
strcasecmp ( "Zdravo Svijete", "Zdravo Svijete" ) 0 Žice su velika i mala slova. Dakle, "Hello World" i "hello World" su isto.

funkcija strncasecmp ():

Ova je funkcija slična funkciji strncmp (), ali ovdje nizovi ne razlikuju velika i mala slova.

Sintaksa:

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

Povratna vrijednost: Isto kao strncmp (), kada se nizovi tretiraju kao velika i mala slova.

Primjer Povratna vrijednost Obrazloženje
strncasecmp ( “Pozdrav svijetu”, “Pozdrav svijetu”, 5 ) 0 Prvih 5 znakova je isto.
strncasecmp ( “Zdravo”, “Zdravo \ 0 Svijetu”, 5 ) 0 Prvih 5 znakova je isto.
strncasecmp ( “Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet", 8 ) 0 '\ 0' nalazi se nakon prvih 5 znakova u oba niza. Dakle, usporedba se zaustavlja nakon 5, a ne 8.
strncasecmp ( „Pozdrav svijete“, „pozdrav svijetu“, 5 ) 0 Žice su velika i mala slova. Dakle, "Zdravo" i "zdravo" su isto.

funkcija memcmp ():

Ova funkcija uspoređuje dva bajta po bajt memorijskih blokova. Moramo proslijediti dva pokazivača memorijskih blokova i broj bajtova za usporedbu.

Sintaksa:

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

Povratna vrijednost: Funkcija vraća 0 ako su dva memorijska bloka (n bajtova) su jednaki; u suprotnom, vraća razlike između prvog neusklađenog para bajtova (bajtovi se tumače kao nepotpisani char objekti, a zatim promoviraju u int).

Primjer Povratna vrijednost Obrazloženje
memcmp ( “Pozdrav svijetu”, “Pozdrav svijetu”, 5 ) 0 Prvih 5 znakova je isto.
memcmp ( “Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet", 8 ) Negativni cijeli broj Prvih 6 znakova je isto, ali 7. znak je različit. Ovdje usporedba nije prestala poput strncmp () pri dobivanju znaka '\ 0'.
memcmp ( “Zdravo Svijete”, “zdravo Svijete”, 11 ) Negativni cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')

Primjer:

Slijedi primjer C koda svih raspravljenih funkcija.

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 (" Zdravo "," Zdravo \\ 0 Svijet ") =>% d \ n", strcmp ("Zdravo", "Zdravo \ 0 Svijet"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Pozdrav \\ 0 \\ 0 \\ 0 "," Pozdrav \\ 0 Svijet ") =>% d \ n", strcmp ("Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet "));
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 (" Pozdrav \\ 0 \\ 0 \\ 0 "," Pozdrav \\ 0 svijetu ", 8) =>% d \ n", strncmp ("Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet ", 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 (" Pozdrav "," Pozdrav \\ 0 svijetu ", 5) =>% d \ n", strncasecmp ("Pozdrav", "Pozdrav \ 0 svijetu", 5));
30. printf ("strncasecmp (" Pozdrav \\ 0 \\ 0 \\ 0 "," Pozdrav \\ 0 Svijet ", 8) =>% d \ n", strncasecmp ("Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet ", 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 (" Pozdrav \\ 0 \\ 0 \\ 0 "," Pozdrav \\ 0 Svijet ", 8) =>% d \ n", memcmp ("Pozdrav \ 0 \ 0 \ 0", "Pozdrav \ 0 Svijet ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. return 0; 40.

Zaključak:

Dakle, u ovom uputstvu vidjeli smo kako se nizovi mogu uspoređivati ​​na razne načine. Kao što smo vidjeli, funkcija stringCompare () vraća -1 za nejednake nizove, ali to se može izmijeniti tako da vraća ASCII vrijednost neusklađenog znaka. Možete ga koristiti u svom kodu, koji je najprikladniji za vas.

Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...
Najbolje igre za ručno praćenje
Oculus Quest nedavno je predstavio sjajnu ideju ručnog praćenja bez kontrolera. Sa sve većim brojem igara i aktivnosti koje izvršavaju podršku bilo fo...
Kako prikazati OSD prekrivač u aplikacijama i igrama na cijelom zaslonu za Linux
Igranje igara preko cijelog zaslona ili upotreba aplikacija u režimu preko cijelog zaslona bez ometanja može vas odsjeći od relevantnih informacija o ...