Stringide võrdlus: C programmeerimine

String Comparison C Programming



C -keele string on märkide massiiv, mis lõpetatakse nullmärgiga ( 0). Seda omadust kasutades võrreldakse stringe.







Kahte stringi saab võrrelda mitmel viisil. Selles õpetuses näeme esmalt kasutaja määratud funktsiooni kahe stringi võrdlemiseks ja seejärel näeme mõningaid sisseehitatud raamatukogu funktsioone, mida saab kasutada kahe stringi väga lihtsaks võrdlemiseks. Niisiis, alustame.



Stringide võrdlus kasutaja määratud funktsiooni abil:

Kirjutame funktsiooni stringCompare () stringide võrdlemiseks. Me läbime stringid ja võrdleme stringi iga märki, kuni jõuame ühe või mõlema või ühe sobimatu lõpuni. Kui läbimine jõuab mõlema stringi lõpuni, siis stringid sobitatakse; muidu on stringid sobimatud.



01./*userDefinedFunction.c*/
02.
03.#kaasake
04.
05.intstringVõrdle( süsistr1[ ], süsistr2[ ] )
06.{
07.inti=0;
08.
09. samas(str1[i] ==str2[i] )
10.
viisteist.
16.kui(str1[i] == ' 0' &&str2[i] == ' 0' )
17.tagasi 0;
18.muidu
19.tagasi -1;
kakskümmend.
kakskümmend üks.}
22.
2. 3.
24.intpeamine()
25.{
26.süsistr1[30],str2[30];
27.
28. printf ('Sisestage esimene string:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Sisestage teine ​​string:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.kui(stringVõrdle(str1,str2) == 0)
3. 4. printf ('Nöörid on võrdsed n');
35.muidu
36. printf ('Nöörid pole võrdsed n');
37.
38.tagasi 0; 39.}





Siin läbime stringid, kasutades loopi ja muutujat i . Kui märgid on mõlema stringi samas asendis võrdsed, on väärtuseks i suurendatakse 1 võrra (rida 13). Kui märgid ei ole võrdsed (rida 09) või jõuame stringi lõppu (rida 11), on while -tsükkel katkestus. Pärast while -tsüklit kontrollime, kas stringi läbimine on lõpuni jõutud või mitte (rida 16). Kui läbimine jõuab mõlema stringi lõpuni, on stringid võrdsed, vastasel juhul mitte.

Stringide võrdlus sisseehitatud raamatukogu funktsioonide abil:

Stringide võrdlemiseks saab kasutada järgmisi raamatukogu funktsioone. Kõik funktsioonid on deklareeritud kaustas string.h päisefail.



funktsioon strcmp ():

See funktsioon võrdleb kahte funktsioonile edastatud stringi.

Süntaks :

int strcmp (const süsi *str1, const süsi *str2)

Tagastusväärtus: Tagasi 0, kui stringid on võrdsed. Tagastage negatiivne täisarv, kui esimese stringi esimese tasakaalustamata märgi ASCII väärtus on väiksem kui teine ​​string. Tagastage positiivne täisarv, kui esimese stringi esimese tasakaalustamata märgi ASCII väärtus on suurem kui teine ​​string. Mõned süsteemid tagastavad esimese mittevastava märgi ASCII väärtuse erinevuse ja mõned süsteemid tagastavad -1, kui esimese stringi esimese sobimatu märgi ASCII väärtus on väiksem kui teine ​​string ja tagastab 1, kui faili esimese tasakaalustamata märgi ASCII väärtus esimene string on suurem kui teine.

Näide Tagasiväärtus Selgitus
strcmp ( Tere maailm, Tere maailm ) 0 Kaks nööri on samad.
strcmp ( Tere, Tere, maailm! ) 0 Stringe võrreldakse tähemärgiga „ 0”. Esimene string lõpeb vaikimisi tähega ' 0' ja teine ​​string sisaldab 'Tere' järel märki ' 0'.
strcmp ( Tere 0 0 0 ', tere 0 maailm ) 0 Stringe võrreldakse tähemärgiga „ 0”.
strcmp ( Tere maailm, tere maailm ) Negatiivne täisarv Esimese stringi esimese tasakaalustamata märgi („H”) ASCII väärtus on väiksem kui teine ​​string („h”)
strcmp ( tere maailm, tere maailm ) Positiivne täisarv Esimese stringi esimese tasakaalustamata märgi („h”) ASCII väärtus on suurem kui teine ​​string („H”)

funktsioon strncmp ():

See funktsioon sarnaneb funktsiooniga strcmp () , kuid siin peame täpsustama, mitu baiti võrreldakse, andes funktsioonile täiendava argumendi.

Süntaks:

int strncmp (const süsi *str1, const süsi *str2, suurus_tn)

Tagastusväärtus: Funktsioon naaseb 0 kui esimene n kahe stringi märgid on võrdsed; vastasel juhul tagastab see negatiivse või positiivse täisarvu, sõltuvalt esimese mittevastava märgi ASCII väärtuse erinevuste märgist.

Näide Tagasiväärtus Selgitus
strncmp ( Tere maailm, tere maailm, 5 ) 0 Esimesed 5 märki on samad.
strncmp ( Tere, Tere, maailm, 5 ) 0 Esimesed 5 märki on samad.
strncmp ( Tere 0 0 0 ', tere 0 maailm, 8 ) 0 „ 0” on mõlema stringi esimese 5 märgi järel. Seega lõpetatakse võrdlus pärast 5, mitte 8.
strncmp ( Tere maailm, tere maailm, 5 ) Negatiivne täisarv Esimese stringi esimese tasakaalustamata märgi („H”) ASCII väärtus on väiksem kui teine ​​string („h”)

funktsioon strcasecmp ():

See funktsioon sarnaneb funktsiooniga strcmp () , kuid siin ei ole stringid tõstutundlikud.

Süntaks:

intstrcasecmp(const süsi *str1, const süsi *str2)

Tagastusväärtus: Sama nagu strcmp () , kuid stringe käsitletakse kui tõstutundetu .

Näide Tagasiväärtus Selgitus
strcasecmp ( Tere maailm, Tere maailm ) 0 Kaks nööri on samad.
strcasecmp ( Tere, Tere, maailm! ) 0 Stringe võrreldakse tähemärgiga „ 0”. Esimene string lõpeb vaikimisi tähega „ 0” ja teine ​​string sisaldab „Tere” järel märki „ 0”.
strcasecmp ( Tere maailm, tere maailm ) 0 Stringid on tõstutundetu. Niisiis, Tere maailm ja tere maailm on samad.

funktsioon strncasecmp ():

See funktsioon sarnaneb funktsiooniga strncmp () , kuid siin ei ole stringid tõstutundlikud.

Süntaks:

intstrncasecmp(const süsi *str1, const süsi *str2)

Tagastusväärtus: Sama nagu strncmp () , kui stringe käsitletakse suurtähtede ja suurtähtede vahel.

Näide Tagasiväärtus Selgitus
strncasecmp ( Tere maailm, tere maailm, 5 ) 0 Esimesed 5 märki on samad.
strncasecmp ( Tere, Tere, maailm, 5 ) 0 Esimesed 5 märki on samad.
strncasecmp ( Tere 0 0 0 ', tere 0 maailm, 8 ) 0 „ 0” on mõlema stringi esimese 5 märgi järel. Seega lõpetatakse võrdlus pärast 5, mitte 8.
strncasecmp ( Tere maailm, tere maailm, 5 ) 0 Stringid on tõstutundetu. Niisiis, tere ja tere on samad.

funktsioon memcmp ():

See funktsioon võrdleb kahte mäluplokki baitide kaupa. Peame võrdlemiseks läbima kaks näpunäidet mäluplokkidest ja baitide arvust.

Süntaks:

int memcmp (const tühine *str1, const tühine *str2, suurus_tn)

Tagastusväärtus: Funktsioon tagastab 0, kui kaks mäluplokki ( n baiti) on võrdsed; vastasel juhul tagastab see erinevused esimese sobimatu baitipaari vahel (baite tõlgendatakse allkirjastamata sümbolobjektidena, seejärel edendatakse int).

Näide Tagasiväärtus Selgitus
memcmp ( Tere maailm, tere maailm, 5 ) 0 Esimesed 5 märki on samad.
memcmp ( Tere 0 0 0 ', tere 0 maailm, 8 ) Negatiivne täisarv Esimesed 6 märki on samad, kuid seitsmes märk on erinev. Siin võrdlemine ei peatunud nagu strncmp () märgi „ 0” saamisel.
memcmp ( Tere maailm, tere maailm, 11 ) Negatiivne täisarv Esimese stringi esimese tasakaalustamata märgi („H”) ASCII väärtus on väiksem kui teine ​​string („h”)

Näide:

Allpool on toodud kõigi käsitletud funktsioonide C -näide.

01./*stringCompare.c*/
02.
03.#kaasake
04.#kaasake
05.
06.intpeamine()
07.{
08. printf ('strcmp ('Tere, Maailm','Tere, Maailm') => %d n', strcmp ( 'Tere, Maailm','Tere, Maailm' ));
09. printf ('strcmp ('Tere','Tere\0Maailm') => %d n', strcmp ( 'Tere','Tere 0Maailm ' ));
10. printf ('strcmp ('Tere, Maailm','Tere, Maailm') => %d n', strcmp ( 'Tere, Maailm','Tere, Maailm' ) );
üksteist. printf ('strcmp ('Tere\0\0\0','Tere\0Maailm') => %d n', strcmp ( 'Tere 0 0 0','Tere 0Maailm ' ));
12.
13. printf (' n--------------- n');
14.
viisteist. printf ('strncmp ('Tere, Maailm','Tere, Maailm', 5) => %d n', strncmp ( 'Tere, Maailm','Tere, Maailm',5 ));
16. printf ('strncmp ('Tere','Tere\0Maailm', 5) => %d n', strncmp ( 'Tere','Tere 0Maailm ',5 ));
17. printf ('strncmp ('Tere\0\0\0','Tere\0Maailm', 8) => %d n', strncmp ( 'Tere 0 0 0','Tere 0Maailm ',8 ));
18. printf ('strncmp ('Tere, Maailm','Tere, Maailm', 5) => %d n', strncmp ( 'Tere, Maailm','Tere, Maailm',5 ));
19.
kakskümmend. printf (' n--------------- n');
kakskümmend üks.
22. printf ('strcasecmp ('Tere, Maailm','Tere, Maailm') => %d n',strcasecmp( 'Tere, Maailm','Tere, Maailm' ));
2. 3. printf ('strcasecmp ('Tere','Tere\0Maailm') => %d n',strcasecmp( 'Tere','Tere 0Maailm ' ));
24. printf ('strcasecmp ('Tere, Maailm','Tere, Maailm') => %d n',strcasecmp( 'Tere, Maailm','Tere, Maailm' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Tere, Maailm','Tere, Maailm', 5) => %d n',strncasecmp( 'Tere, Maailm','Tere, Maailm',5 ) );
29. printf ('strncasecmp ('Tere','Tere\0Maailm', 5) => %d n',strncasecmp( 'Tere','Tere 0Maailm ',5 ));
30. printf ('strncasecmp ('Tere\0\0\0','Tere\0Maailm', 8) => %d n',strncasecmp( 'Tere 0 0 0','Tere 0Maailm ',8 ));
31. printf ('strncasecmp ('Tere, Maailm','Tere, Maailm', 5) => %d n',strncasecmp( 'Tere, Maailm','Tere, Maailm',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Tere, Maailm','Tere, Maailm', 5) => %d n', memcmp ( 'Tere, Maailm','Tere, Maailm',5 ) );
36. printf ('memcmp ('Tere\0\0\0','Tere\0Maailm', 8) => %d n', memcmp ( 'Tere 0 0 0','Tere 0Maailm ',8 ));
37. printf ('memcmp ('Tere, Maailm','Tere, Maailm', 11) => %d n', memcmp ( 'Tere, Maailm','Tere, Maailm',üksteist ));
38.
39.tagasi 0; 40.}

Järeldus:

Niisiis, selles õpetuses oleme näinud, kuidas stringe saab erineval viisil võrrelda. Nagu nägime, tagastab funktsioon stringCompare () ebaühtlaste stringide korral -1, kuid seda saab muuta nii, et see tagastab sobimatu tähe ASCII väärtuse. Saate seda kasutada oma koodis, mis sobib teile kõige paremini.