C Programmeerimine

Stringi võrdlus C programmeerimine

Stringi võrdlus C programmeerimine
C-keeles string on märkide massiiv, mis on lõpetatud nullmärgiga (\ 0). Selle omaduse stringide kasutamist võrreldakse.

Kahte stringi saab erinevalt võrrelda. Selles õpetuses näeme kõigepealt kasutaja määratud funktsiooni kahe stringi võrdlemiseks ja seejärel näeme mõningaid sisseehitatud teegi funktsioone, mida saab kasutada kahe stringi väga hõlpsaks võrdlemiseks. Alustame siis.

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

Kirjutame funktsiooni stringCompare () stringide võrdlemiseks. Liigutame stringe ja võrdleme stringi iga märki, kuni jõuame ühe või mõlema lõpuni või leitakse üks sobimatu. Kui läbimine on jõutud mõlema stringi lõpuni, siis on stringid omavahel sobitatud; muidu ei sobita stringid omavahel.

01. / * userDefinedFunction.c * /
02.
03. # kaasata
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. samas (str1 [i] == str2 [i])
10.
11. kui (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. murda;
13. i ++;
14.
15.
16. kui (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. tagastama 0;
18. muud
19. tagasitulek -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [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 (stringCompare (str1, str2) == 0)
34. printf ("Stringid on võrdsed \ n");
35. muud
36. printf ("Stringid pole võrdsed \ n");
37.
38. tagastama 0; 39.

Siin läbime stringid, kasutades while loopi ja muutujat i. Kui märgid on mõlema stringi samas asendis võrdsed, väärtus i suurendatakse 1-ga (rida 13). Kui tähemärgid pole võrdsed (rida 09) või jõuame stringi lõppu (rida 11), on while-silmus katkestus. Pärast mõnda silmust kontrollime, kas mõlemad stringi läbimised on lõpuni jõudnud või mitte (rida 16). Kui läbimine jõuab mõlema stringi lõpuni, siis stringid on võrdsed, vastasel juhul mitte.

Stringide võrdlus sisseehitatud raamatukogu funktsioonide abil:

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

funktsioon strcmp ():

See funktsioon võrdleb kahte funktsioonile edastatud stringi.

Süntaks:

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

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

Näide Tagastusväärtus Selgitus
strcmp ( "Tere maailm", "Tere maailm" ) 0 Kaks stringi on ühesugused.
strcmp ( "Tere", "Tere \ 0 maailm" ) 0 Stringi võrreldakse tähemärgini '\ 0'. Esimene string lõpeb vaikimisi tähega „\ 0” ja teine ​​string sisaldab märki „\ 0” pärast sõna „Tere”.
strcmp ( "Tere \ 0 \ 0 \ 0", "Tere \ 0 maailm" ) 0 Stringi võrreldakse kuni märgini '\ 0'.
strcmp ( "Tere maailm", "tere maailm" ) Negatiivne täisarv Esimese stringi esimese sobimatu märgi ('H') ASCII väärtus on väiksem kui teise stringi ('h')
strcmp ("Tere maailm", "tere maailm" ) Positiivne täisarv Esimese stringi esimese sobimatu märgi ('h') ASCII väärtus on suurem kui teise stringi ('H')

funktsioon strncmp ():

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

Süntaks:

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

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

Näide Tagastusväärtus Selgitus
strncmp ( “Tere maailm”, “Tere maailm”, 5 ) 0 Esimesed 5 tähemärki on samad.
strncmp ( „Tere”, „Tere \ 0 maailm”, 5 ) 0 Esimesed 5 tähemärki on samad.
strncmp ( "Tere \ 0 \ 0 \ 0", "Tere \ 0 maailm", 8 ) 0 '\ 0' on mõlema stringi esimese viie märgi järel. Niisiis, võrdlus lõpetatakse pärast 5 mitte 8.
strncmp ( “Tere maailm”, “tere maailm”, 5 ) Negatiivne täisarv Esimese stringi esimese sobimatu märgi ('H') ASCII väärtus on väiksem kui teise stringi ('h')

funktsioon strcasecmp ():

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

Süntaks:

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

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

Näide Tagastusväärtus Selgitus
strcasecmp ( "Tere maailm", "Tere maailm" ) 0 Kaks stringi on ühesugused.
strcasecmp ( "Tere", "Tere \ 0 maailm" ) 0 Stringi võrreldakse tähemärgini '\ 0'. Esimene string lõpeb vaikimisi tähega „\ 0” ja teine ​​string sisaldab märki „\ 0” pärast sõna „Tere”.
strcasecmp ( "Tere maailm", "tere maailm" ) 0 Keelpillid on tõstutundetu. Nii et “Tere maailm” ja “tere maailm” on samad.

funktsioon strncasecmp ():

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

Süntaks:

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

Tagastusväärtus: Sama nagu strncmp (), kui stringe käsitletakse väiketähtedega.

Näide Tagastusväärtus Selgitus
strncasecmp ( “Tere maailm”, “Tere maailm”, 5 ) 0 Esimesed 5 tähemärki on samad.
strncasecmp ( „Tere”, „Tere \ 0 maailm”, 5 ) 0 Esimesed 5 tähemärki on samad.
strncasecmp ( "Tere \ 0 \ 0 \ 0", "Tere \ 0 maailm", 8 ) 0 '\ 0' on mõlema stringi esimese viie märgi järel. Niisiis, võrdlus lõpetatakse pärast 5 mitte 8.
strncasecmp ( “Tere maailm”, “tere maailm”, 5 ) 0 Keelpillid on tõstutundetu. Nii et “Tere” ja “Tere” on samad.

funktsioon memcmp ():

See funktsioon võrdleb kahte mäluplokki baiditi. Võrdlemiseks peame läbima kaks mäluplokki osutit ja baitide arvu.

Süntaks:

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

Tagastusväärtus: Funktsioon tagastab 0, kui kaks mäluplokki (n baidid) on võrdsed; vastasel juhul tagastab erinevused esimese sobimatu baitide paari vahel (baidid tõlgendatakse allkirjastamata söobjektidena ja seejärel ülendatakse int-ks).

Näide Tagastusväärtus Selgitus
memcmp ( “Tere maailm”, “Tere maailm”, 5 ) 0 Esimesed 5 tähemärki on samad.
memcmp ( "Tere \ 0 \ 0 \ 0", "Tere \ 0 maailm", 8 ) Negatiivne täisarv Esimesed 6 tähemärki on samad, kuid seitsmes märk on erinev. Siin võrdlus ei peatunud nagu strncmp () tähemärgi '\ 0' hankimisel.
memcmp ( “Tere maailm”, “tere maailm”, 11 ) Negatiivne täisarv Esimese stringi esimese sobimatu märgi ('H') ASCII väärtus on väiksem kui teise stringi ('h')

Näide:

Järgnevalt on toodud kõigi arutatud funktsioonide C-koodi näide.

01. / * stringCompare.c * /
02.
03. # kaasata
04. # kaasata
05.
06. int main ()
07.
08. printf ("strcmp (" Tere maailm "," Tere maailm ") =>% d \ n", strcmp ("Tere maailm", "Tere maailm"));
09. printf ("strcmp (" Tere "," Tere \\ 0 maailm ") =>% d \ n", strcmp ("Tere", "Tere \ 0 maailm"));
10. printf ("strcmp (" Tere maailm "," tere maailm ") =>% d \ n", strcmp ("Tere maailm", "tere maailm"));
11. printf ("strcmp (" Tere \\ 0 \\ 0 \\ 0 "," Tere \\ 0 maailm ") =>% d \ n", strcmp ("Tere \ 0 \ 0 \ 0", "Tere \ 0 Maailm "));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Tere maailm "," Tere maailm ", 5) =>% d \ n", strncmp ("Tere maailm", "Tere maailm", 5));
16. printf ("strncmp (" Tere "," Tere \\ 0 maailm ", 5) =>% d \ n", strncmp ("Tere", "Tere \ 0 maailm", 5));
17. printf ("strncmp (" Tere \\ 0 \\ 0 \\ 0 "," Tere \\ 0 maailm ", 8) =>% d \ n", strncmp ("Tere \ 0 \ 0 \ 0", "Tere! \ 0 maailm ", 8));
18. printf ("strncmp (" Tere maailm "," tere maailm ", 5) =>% d \ n", strncmp ("Tere maailm", "tere maailm", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Tere maailm "," Tere maailm ") =>% d \ n", strcasecmp ("Tere maailm", "Tere maailm"));
23. printf ("strcasecmp (" Tere "," Tere \\ 0 maailm ") =>% d \ n", strcasecmp ("Tere", "Tere \ 0 maailm"));
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 \\ 0 maailm ", 5) =>% d \ n", strncasecmp ("Tere", "Tere \ 0 maailm", 5));
30. printf ("strncasecmp (" Tere \\ 0 \\ 0 \\ 0 "," Tere \\ 0 maailm ", 8) =>% d \ n", strncasecmp ("Tere \ 0 \ 0 \ 0", "Tere! \ 0 maailm ", 8));
31. printf ("strncasecmp (" Tere maailm "," tere maailm ", 5) =>% d \ n", strncasecmp ("Tere maailm", "tere maailm", 5));
32.
33. printf ("\ n --------------- \ n");
34.
35. printf ("memcmp (" Tere maailm "," Tere maailm ", 5) =>% d \ n", memcmp ("Tere maailm", "Tere maailm", 5));
36. printf ("memcmp (" Tere \\ 0 \\ 0 \\ 0 "," Tere \\ 0 maailm ", 8) =>% d \ n", memcmp ("Tere \ 0 \ 0 \ 0", "Tere! \ 0 maailm ", 8));
37. printf ("memcmp (" Tere maailm "," tere maailm ", 11) =>% d \ n", memcmp ("Tere maailm", "tere maailm", 11));
38.
39. tagastama 0; 40.

Järeldus:

Nii et selles õpetuses oleme näinud, kuidas stringe saab mitmel viisil võrrelda. Nagu nägime, tagastab funktsioon stringCompare () ebavõrdsete stringide korral -1, kuid seda saab muuta nii, et see tagastaks sobimatu märgi ASCII väärtuse. Saate seda kasutada oma koodis, mis sobib teile kõige paremini.

Installige uusim OpenRA strateegiamäng Ubuntu Linuxi
OpenRA on tasuta / tasuta reaalajas strateegiamängumootor, mis loob uuesti Westwoodi varased mängud nagu klassikaline Command & Conquer: Red Alert. Ja...
Installige Linuxile uusim Dolphin Emulator for Gamecube & Wii
Dolphini emulaator võimaldab teil mängida valitud Gamecube & Wii mänge Linuxi personaalarvutites (PC). Vabalt saadaval oleva ja avatud lähtekoodiga m...
Kuidas kasutada GameConquerori petumootorit Linuxis
Artikkel sisaldab juhendit GameConquerori petumootori kasutamise kohta Linuxis. Paljud kasutajad, kes mängivad Windowsis mänge, kasutavad rakendust „C...