Usporedba nizova: C programiranje

String Comparison C Programming



Niz na jeziku C je niz znakova koji se završava nultim znakom ( 0). Pomoću ovog svojstva nizovi se uspoređuju.







Dvije se žice mogu usporediti na različite načine. U ovom ćemo vodiču prvo 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 jednostavno uspoređivanje dva niza. Dakle, krenimo.



Usporedba nizova pomoću korisnički definirane funkcije:

Napisat ćemo funkciju stringCompare () za usporedbu žica. Pomičemo nizove i uspoređujemo svaki znak niza dok ne dođemo do kraja bilo kojeg ili se pronađu oba ili jedno neusklađeno. Ako je prijelaz dosegnut do kraja oba niza, tada se nizovi podudaraju; u suprotnom, nizovi se ne podudaraju.



01./*userDefinedFunction.c*/
02.
03.#uključi
04.
05.intstringUporedi( charstr1[ ], charstr2[ ] )
06.{
07.inti=0;
08.
09. dok(str1[i] ==str2[i] )
10.
petnaest.
16.ako(str1[i] == ' 0' &&str2[i] == ' 0' )
17.povratak 0;
18.drugo
19.povratak -1;
dvadeset.
dvadeset i jedan.}
22.
2. 3.
24.intglavni()
25.{
26.charstr1[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.ako(stringUporedi(str1,str2) == 0)
3. 4. printf ('Žice su jednake n');
35.drugo
36. printf ('Žice nisu jednake n');
37.
38.povratak 0; 39.}





Ovdje prelazimo nizove pomoću while petlje i varijable i . Kad su znakovi jednaki na istom položaju oba niza, vrijednost je i 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 petlje while provjeravamo jesu li oba prelaska niza dosegnuta do kraja ili ne (redak 16). Ako je prelazak postignut do kraja oba niza, tada su nizovi jednaki, u protivnom nisu.

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 datoteku zaglavlja.



funkcija strcmp ():

Ova funkcija uspoređuje dva niza prenesena u funkciju.

Sintaksa :

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

Povratna vrijednost: Vratite 0 ako su nizovi jednaki. Vraća cijeli negativan broj ako je ASCII vrijednost prvog neusklađenog znaka prvog niza manja od drugog niza. Vraća 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 niz je veći od drugog niza.

Primjer Povratna vrijednost Obrazloženje
strcmp ( Hello World, Hello World ) 0 Dvije žice su iste.
strcmp ( Pozdrav, Pozdrav 0 Svijete ) 0 Žice se uspoređuju do znaka ' 0'. Prvi niz prema zadanim postavkama završava s ' 0', a drugi niz sadrži znak ' 0' iza 'Zdravo'.
strcmp ( Pozdrav 0 0 0 ″, Pozdrav 0 Svijete ) 0 Žice se uspoređuju do znaka ' 0'.
strcmp ( Zdravo Svijete, zdravo Svijete ) Negativan cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')
strcmp ( pozdrav svijet, zdravo svijet ) Pozitivan cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('h') veća je od drugog niza ('H')

funkcija strncmp ():

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

Sintaksa:

int strncmp (konst char *str1, konst char *str2, veličina_tn)

Povratna vrijednost: Funkcija se vraća 0 ako je prvi n znakovi dva niza su jednaki; u suprotnom, vraća negativni ili pozitivni cijeli broj ovisno o predznaku razlika između ASCII vrijednosti prvog neusklađenog znaka.

Primjer Povratna vrijednost Obrazloženje
strncmp ( Hello World, Hello World, 5 ) 0 Prvih 5 znakova je isto.
strncmp ( Pozdrav, Pozdrav 0 Svijete, 5 ) 0 Prvih 5 znakova je isto.
strncmp ( Pozdrav 0 0 0 ″, Pozdrav 0 Svijete, 8 ) 0 ' 0' je iza prvih 5 znakova u oba niza. Dakle, usporedba se zaustavlja nakon 5, a ne 8.
strncmp ( Zdravo Svijete, zdravo Svijete, 5 ) Negativan cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')

funkcija strcasecmp ():

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

Sintaksa:

intstrcasecmp(konst char *str1, konst char *str2)

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

Primjer Povratna vrijednost Obrazloženje
strcasecmp ( Hello World, Hello World ) 0 Dvije žice su iste.
strcasecmp ( Pozdrav, Pozdrav 0 Svijete ) 0 Žice se uspoređuju do znaka ' 0'. Prvi niz prema zadanim postavkama završava s ' 0', a drugi niz sadrži znak ' 0' iza 'Zdravo'.
strcasecmp ( Zdravo Svijete, zdravo Svijete ) 0 Gudači su velika i mala slova Dakle, Hello World i hello World su isti.

funkcija strncasecmp ():

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

Sintaksa:

intstrncasecmp(konst char *str1, konst char *str2)

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

Primjer Povratna vrijednost Obrazloženje
strncasecmp ( Hello World, Hello World, 5 ) 0 Prvih 5 znakova je isto.
strncasecmp ( Pozdrav, Pozdrav 0 Svijete, 5 ) 0 Prvih 5 znakova je isto.
strncasecmp ( Pozdrav 0 0 0 ″, Pozdrav 0 Svijete, 8 ) 0 ' 0' je iza prvih 5 znakova u oba niza. Dakle, usporedba se zaustavlja nakon 5, a ne 8.
strncasecmp ( Zdravo Svijete, zdravo Svijete, 5 ) 0 Gudači su velika i mala slova Dakle, Hello i hello su isti.

memcmp () funkcija:

Ova funkcija uspoređuje dva memorijska bloka po bajt. Moramo proći dva pokazivača memorijskih blokova i broj bajtova za usporedbu.

Sintaksa:

int memcmp (konst poništiti *str1, konst poništiti *str2, veličina_tn)

Povratna vrijednost: Funkcija vraća 0 ako 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 promiču u int).

Primjer Povratna vrijednost Obrazloženje
memcmp ( Hello World, Hello World, 5 ) 0 Prvih 5 znakova je isto.
memcmp ( Pozdrav 0 0 0 ″, Pozdrav 0 Svijete, 8 ) Negativan cijeli broj Prvih 6 znakova je isto, ali sedmi znak je različit. Ovdje usporedba nije prestala kao strncmp () kada dobijete znak ' 0'.
memcmp ( Zdravo Svijete, zdravo Svijete, 11 ) Negativan cijeli broj ASCII vrijednost prvog neusklađenog znaka prvog niza ('H') manja je od drugog niza ('h')

Primjer:

Slijedi primjer C koda svih funkcija o kojima se raspravlja.

01./*stringCompare.c*/
02.
03.#uključi
04.#uključi
05.
06.intglavni()
07.{
08. printf ('strcmp ('Pozdrav svijete','Pozdrav svijete') => %d n', strcmp ( 'Pozdrav svijete','Pozdrav svijete' ));
09. printf ('strcmp ('zdravo','Zdravo\0Svijet') => %d n', strcmp ( 'Zdravo','Zdravo 0Svijet' ));
10. printf ('strcmp ('Pozdrav svijete','Pozdrav svijete') => %d n', strcmp ( 'Pozdrav svijete','Pozdrav svijete' ) );
jedanaest. printf ('strcmp ('Zdravo\0\0\0','Zdravo\0Svijet') => %d n', strcmp ( 'Zdravo 0 0 0','Zdravo 0Svijet' ));
12.
13. printf (' n--------------- n');
14.
petnaest. printf ('strncmp ('Pozdrav svijete','Pozdrav svijete', 5) => %d n', strncmp ( 'Pozdrav svijete','Pozdrav svijete',5 ));
16. printf ('strncmp ('zdravo','Zdravo\0Svijet', 5) => %d n', strncmp ( 'Zdravo','Zdravo 0Svijet',5 ));
17. printf ('strncmp ('Zdravo\0\0\0','Zdravo\0Svijet', 8) => %d n', strncmp ( 'Zdravo 0 0 0','Zdravo 0Svijet',8 ));
18. printf ('strncmp ('Pozdrav svijete','Pozdrav svijete', 5) => %d n', strncmp ( 'Pozdrav svijete','Pozdrav svijete',5 ));
19.
dvadeset. printf (' n--------------- n');
dvadeset i jedan.
22. printf ('strcasecmp ('Pozdrav svijete','Pozdrav svijete') => %d n',strcasecmp( 'Pozdrav svijete','Pozdrav svijete' ));
2. 3. printf ('strcasecmp ('zdravo','Zdravo\0Svijet') => %d n',strcasecmp( 'Zdravo','Zdravo 0Svijet' ));
24. printf ('strcasecmp ('Pozdrav svijete','Pozdrav svijete') => %d n',strcasecmp( 'Pozdrav svijete','Pozdrav svijete' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Pozdrav svijete','Pozdrav svijete', 5) => %d n',strncasecmp( 'Pozdrav svijete','Pozdrav svijete',5 ) );
29. printf ('strncasecmp ('zdravo','Zdravo\0Svijet', 5) => %d n',strncasecmp( 'Zdravo','Zdravo 0Svijet',5 ));
30. printf ('strncasecmp ('Zdravo\0\0\0','Zdravo\0Svijet', 8) => %d n',strncasecmp( 'Zdravo 0 0 0','Zdravo 0Svijet',8 ));
31. printf ('strncasecmp ('Pozdrav svijete','Pozdrav svijete', 5) => %d n',strncasecmp( 'Pozdrav svijete','Pozdrav svijete',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Pozdrav svijete','Pozdrav svijete', 5) => %d n', memcmp ( 'Pozdrav svijete','Pozdrav svijete',5 ) );
36. printf ('memcmp ('Zdravo\0\0\0','Zdravo\0Svijet', 8) => %d n', memcmp ( 'Zdravo 0 0 0','Zdravo 0Svijet',8 ));
37. printf ('memcmp ('Pozdrav svijete','Pozdrav svijete', 11) => %d n', memcmp ( 'Pozdrav svijete','Pozdrav svijete',jedanaest ));
38.
39.povratak 0; 40.}

Zaključak:

Dakle, u ovom smo vodiču vidjeli kako se žice mogu usporediti na različite načine. Kao što smo vidjeli, funkcija stringCompare () vraća -1 za nejednake nizove, ali to se može promijeniti tako da vraća ASCII vrijednost neusklađenog znaka. Možete ga koristiti u svom kodu, koji vama najviše odgovara.