Styginių palyginimas: C programavimas

String Comparison C Programming



C kalbos eilutė yra simbolių masyvas, kuris baigiamas nuliniu simboliu ( 0). Naudojant šią ypatybę, lyginamos eilutės.







Dvi eilutes galima palyginti įvairiai. Šioje pamokoje pirmiausia pamatysime vartotojo apibrėžtą funkciją, kad būtų galima palyginti dvi eilutes, o tada pamatysime kai kurias integruotas bibliotekos funkcijas, kuriomis galima labai lengvai palyginti dvi eilutes. Taigi, pradėkime.



Eilių palyginimas naudojant vartotojo apibrėžtą funkciją:

Mes parašysime funkciją stringCompare () lyginti stygas. Mes pereiname eilutes ir palyginame kiekvieną eilutės simbolį, kol pasieksime bet kurio arba abiejų arba vieno neatitinkančio elemento pabaigą. Jei traversa pasiekiama iki abiejų stygų pabaigos, tada stygos sutampa; priešingu atveju eilutės nesutampa.



01./*userDefinedFunction.c*/
02.
03.#įtraukti
04.
05.tarptstringCompare( anglisstr1[ ], anglisstr2[ ] )
06.{
07.tarpti=0;
08.
09. tuo tarpu(str1[i] ==str2[i] )
10.
penkiolika.
16.jei(str1[i] == ' 0' &&str2[i] == ' 0' )
17.grįžti 0;
18.Kitas
19.grįžti -1;
dvidešimt.
dvidešimt vienas.}
22.
2. 3.
24.tarptpagrindinis()
25.{
26.anglisstr1[30],str2[30];
27.
28. printf ('Įveskite pirmąją eilutę:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Įveskite antrąją eilutę:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.jei(stringCompare(str1,str2) == 0)
3. 4. printf ('Stygos lygios n');
35.Kitas
36. printf („Stygos nėra lygios n');
37.
38.grįžti 0; 39.}





Čia einame per eilutes, naudodami ciklą ir kintamąjį i . Kai simboliai vienodi abiejų eilučių padėtyje, reikšmė i padidinamas 1 (13 eilutė). Jei simboliai nėra lygūs (09 eilutė) arba mes pasiekiame eilutės pabaigą (11 eilutė), tada ciklas while yra pertrauka. Pasibaigus ciklui „ciklas“, patikriname, ar abi eilutės pasiekiamos iki galo, ar ne (16 eilutė). Jei traversa pasiekiama iki abiejų stygų pabaigos, tada eilutės yra lygios, kitaip ne.

Eilių palyginimas naudojant integruotas bibliotekos funkcijas:

Eilutės palyginimui gali būti naudojamos šios bibliotekos funkcijos. Visos funkcijos yra deklaruotos eilutė.h antraštės failas.



funkcija strcmp ():

Ši funkcija lygina dvi funkcijai perduotas eilutes.

Sintaksė :

tarpt strcmp (konst anglis *str1, konst anglis *str2)

Grąžinimo vertė: Jei eilutės lygios, grąžinkite 0. Pateikite neigiamą sveikąjį skaičių, jei pirmosios nesuderintos pirmosios eilutės simbolio ASCII vertė yra mažesnė už antrąją eilutę. Pateikite teigiamą sveikąjį skaičių, jei pirmosios nesuderintos pirmosios eilutės simbolio ASCII vertė yra didesnė už antrąją eilutę. Kai kurios sistemos grąžina pirmo neatitinkančio simbolio ASCII vertės skirtumą, o kai kurios grąžina -1, jei pirmosios eilutės pirmojo nesuderinto simbolio ASCII vertė yra mažesnė už antrąją eilutę ir grąžina 1, jei pirmojo nesuderinto simbolio ASCII reikšmė pirmoji eilutė yra didesnė už antrąją.

Pavyzdys Grąžinti vertę Paaiškinimas
strcmp ( Sveikas pasauli, labas pasauli ) 0 Dvi eilutės yra vienodos.
strcmp ( Sveiki, Sveiki 0 Pasaulis ) 0 Eilutės lyginamos iki simbolio „ 0“. Pirmoji eilutė pagal numatytuosius nustatymus baigiasi „ 0“, o antroje eilutėje yra „ 0“ simbolis po „Sveiki“.
strcmp ( Sveiki 0 0 0 ″, sveiki 0 pasauli ) 0 Eilutės lyginamos iki simbolio „ 0“.
strcmp ( Sveikas pasauli, labas pasauli ) Neigiamas sveikasis skaičius Pirmosios eilutės pirmojo nesuderinto simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)
strcmp ( sveikas pasauli, labas pasauli ) Teigiamas sveikasis skaičius Pirmosios eilutės pirmojo nesuderinto simbolio („h“) ASCII vertė yra didesnė nei antrosios eilutės („H“)

funkcija strncmp ():

Ši funkcija yra panaši į funkciją strcmp () , bet čia turime nurodyti, kiek baitų lyginama, perduodant funkcijai papildomą argumentą.

Sintaksė:

tarpt strncmp (konst anglis *str1, konst anglis *str2, dydis_tn)

Grąžinimo vertė: Funkcija grįžta 0 jei pirmasis n dviejų eilučių simboliai yra lygūs; priešingu atveju jis grąžina neigiamą arba teigiamą sveikąjį skaičių, priklausomai nuo pirmojo nesutampančio simbolio ASCII vertės skirtumų ženklo.

Pavyzdys Grąžinti vertę Paaiškinimas
strncmp ( Sveikas pasaulis, Sveikas pasauli, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncmp ( Sveiki, Sveiki, pasaulis, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncmp ( Sveiki 0 0 0 ″, sveiki 0 pasaulis, 8 ) 0 „ 0“ yra po pirmųjų 5 simbolių abiejose eilutėse. Taigi palyginimas nutraukiamas po 5, o ne 8.
strncmp ( Sveikas pasauli, labas pasauli, 5 ) Neigiamas sveikasis skaičius Pirmosios eilutės pirmojo nesuderinto simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)

funkcija strcasecmp ():

Ši funkcija yra panaši į funkciją strcmp () , bet čia eilutės neskiria didžiųjų ir mažųjų raidžių.

Sintaksė:

tarptstrcasecmp(konst anglis *str1, konst anglis *str2)

Grąžinimo vertė: Taip pat kaip strcmp () , bet eilutės traktuojamos kaip didžiosios ir mažosios raidės .

Pavyzdys Grąžinti vertę Paaiškinimas
strcasecmp ( Sveikas pasauli, labas pasauli ) 0 Dvi eilutės yra vienodos.
strcasecmp ( Sveiki, Sveiki 0 Pasaulis ) 0 Eilutės lyginamos iki simbolio „ 0“. Pirmoji eilutė pagal numatytuosius nustatymus baigiasi „ 0“, o antrojoje eilutėje po „Sveiki“ yra simbolis „ 0“.
strcasecmp ( Sveikas pasauli, labas pasauli ) 0 Stygos yra didžiosios ir mažosios raidės. Taigi, „Hello World“ ir „Hello World“ yra tas pats.

funkcija strncasecmp ():

Ši funkcija yra panaši į funkciją strncmp () , bet čia eilutės neskiria didžiųjų ir mažųjų raidžių.

Sintaksė:

tarptstrncasecmp(konst anglis *str1, konst anglis *str2)

Grąžinimo vertė: Taip pat kaip strncmp () , kai eilutės traktuojamos kaip didžiosios ir mažosios raidės.

Pavyzdys Grąžinti vertę Paaiškinimas
strncasecmp ( Sveikas pasaulis, Sveikas pasauli, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncasecmp ( Sveiki, Sveiki, pasaulis, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncasecmp ( Sveiki 0 0 0 ″, sveiki 0 pasaulis, 8 ) 0 „ 0“ yra po pirmųjų 5 simbolių abiejose eilutėse. Taigi palyginimas nutraukiamas po 5, o ne 8.
strncasecmp ( Sveikas pasauli, labas pasauli, 5 ) 0 Stygos yra didžiosios ir mažosios raidės. Taigi, labas ir labas yra tas pats.

funkcija memcmp ():

Ši funkcija lygina du atminties blokus baitais baitais. Turime perduoti du atminties blokų rodykles ir baitų skaičių, kuriuos reikia palyginti.

Sintaksė:

tarpt memcmp (konst tuštuma *str1, konst tuštuma *str2, dydis_tn)

Grąžinimo vertė: Funkcija grąžina 0, jei du atminties blokai ( n baitų) yra lygūs; priešingu atveju jis grąžina skirtumus tarp pirmosios nesutampančios baitų poros (baitai interpretuojami kaip nepasirašyti simboliai, tada paaukštinami į int).

Pavyzdys Grąžinti vertę Paaiškinimas
memcmp ( Sveikas pasaulis, Sveikas pasauli, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
memcmp ( Sveiki 0 0 0 ″, sveiki 0 pasaulis, 8 ) Neigiamas sveikasis skaičius Pirmieji 6 simboliai yra vienodi, tačiau septintasis simbolis yra kitoks. Čia palyginimas nenutrūko strncmp () kai gaunamas „ 0“ simbolis.
memcmp ( Sveikas pasauli, labas pasauli, 11 ) Neigiamas sveikasis skaičius Pirmosios eilutės pirmojo nesuderinto simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)

Pavyzdys:

Toliau pateikiamas visų aptartų funkcijų C kodo pavyzdys.

01./*stringCompare.c*/
02.
03.#įtraukti
04.#įtraukti
05.
06.tarptpagrindinis()
07.{
08. printf ('strcmp ('Labas pasauli','Labas pasauli') => %d n', strcmp ( 'Labas pasauli','Labas pasauli' ));
09. printf ('strcmp ('Sveiki','Sveiki\0Pasaulis') => %d n', strcmp ( 'Sveiki','Sveiki 0Pasaulis ' ));
10. printf ('strcmp ('Labas pasauli','Labas pasauli') => %d n', strcmp ( 'Labas pasauli','Labas pasauli' ) );
vienuolika. printf ('strcmp ('Sveiki\0\0\0','Sveiki\0Pasaulis') => %d n', strcmp ( 'Sveiki 0 0 0','Sveiki 0Pasaulis ' ));
12.
13. printf (' n--------------- n');
14.
penkiolika. printf ('strncmp ('Labas pasauli','Labas pasauli“, 5) => %d n', strncmp ( 'Labas pasauli','Labas pasauli',5 ));
16. printf ('strncmp ('Sveiki','Sveiki\0Pasaulis“, 5) => %d n', strncmp ( 'Sveiki','Sveiki 0Pasaulis ',5 ));
17. printf ('strncmp ('Sveiki\0\0\0','Sveiki\0Pasaulis', 8) => %d n', strncmp ( 'Sveiki 0 0 0','Sveiki 0Pasaulis ',8 ));
18. printf ('strncmp ('Labas pasauli','Labas pasauli“, 5) => %d n', strncmp ( 'Labas pasauli','Labas pasauli',5 ));
19.
dvidešimt. printf (' n--------------- n');
dvidešimt vienas.
22. printf ('strcasecmp ('Labas pasauli','Labas pasauli') => %d n',strcasecmp( 'Labas pasauli','Labas pasauli' ));
2. 3. printf ('strcasecmp ('Sveiki','Sveiki\0Pasaulis') => %d n',strcasecmp( 'Sveiki','Sveiki 0Pasaulis ' ));
24. printf ('strcasecmp ('Labas pasauli','Labas pasauli') => %d n',strcasecmp( 'Labas pasauli','Labas pasauli' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Labas pasauli','Labas pasauli“, 5) => %d n',strncasecmp( 'Labas pasauli','Labas pasauli',5 ) );
29. printf ('strncasecmp ('Sveiki','Sveiki\0Pasaulis“, 5) => %d n',strncasecmp( 'Sveiki','Sveiki 0Pasaulis ',5 ));
30. printf ('strncasecmp ('Sveiki\0\0\0','Sveiki\0Pasaulis', 8) => %d n',strncasecmp( 'Sveiki 0 0 0','Sveiki 0Pasaulis ',8 ));
31. printf ('strncasecmp ('Labas pasauli','Labas pasauli“, 5) => %d n',strncasecmp( 'Labas pasauli','Labas pasauli',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Labas pasauli','Labas pasauli“, 5) => %d n', memcmp ( 'Labas pasauli','Labas pasauli',5 ) );
36. printf ('memcmp ('Sveiki\0\0\0','Sveiki\0Pasaulis', 8) => %d n', memcmp ( 'Sveiki 0 0 0','Sveiki 0Pasaulis ',8 ));
37. printf ('memcmp ('Labas pasauli','Labas pasauli', 11) => %d n', memcmp ( 'Labas pasauli','Labas pasauli',vienuolika ));
38.
39.grįžti 0; 40.}

Išvada:

Taigi, šioje pamokoje pamatėme, kaip eilutes galima palyginti įvairiais būdais. Kaip matėme, funkcija stringCompare () grąžina -1 nelygioms eilutėms, tačiau tai galima pakeisti taip, kad ji grąžintų nesutampančio simbolio ASCII vertę. Galite jį naudoti savo kode, kuris jums labiausiai tinka.