C programavimas

Styginių palyginimas C programavimas

Styginių palyginimas C programavimas
C kalbos eilutė yra simbolių masyvas, kuris baigiamas nuliniu simboliu (\ 0). Naudojamos šios ypatybės eilutės yra lyginamos.

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

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

Parašysime funkciją stringCompare () palyginti stygas. Mes einame eilutes ir lyginame kiekvieną eilutės simbolį, kol pasieksime bet kurio iš jų pabaigą arba bus rasta abiejų arba bus surasta viena neatitinkanti. Jei perėjimas pasiekiamas iki abiejų stygų pabaigos, tada stygos yra suderintos; kitaip stygos nesutampa.

01. / * userDefinedFunction.c * /
02.
03. # įtraukti
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. o (str1 [i] == str2 [i])
10.
11. jei (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. pertrauka;
13. i ++;
14.
15.
16. jei (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. grąžinti 0;
18. Kitas
19. grįžti -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Įveskite pirmąją eilutę:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Įveskite antrą eilutę:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. jei (stringCompare (str1, str2) == 0)
34. printf ("Stygos yra lygios \ n");
35. Kitas
36. printf ("Eilutės nėra lygios \ n");
37.
38. grąžinti 0; 39.

Čia mes einame eilutes naudodami while loop ir kintamąjį i. Kai simboliai yra vienodi abiejų eilučių vienodoje 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 „loop“ yra pertrauka. Po ciklo ciklo patikriname, ar abu stygų perėjimai yra pasiekti, ar ne (16 eilutė). Jei perėjimas pasiekiamas iki abiejų stygų pabaigos, tada stygos yra lygios, kitaip ne.

Stygų palyginimas naudojant integruotas bibliotekos funkcijas:

Eilutės palyginimui galima naudoti šias bibliotekos funkcijas. Visos funkcijos yra deklaruojamos stygos.h antraštės failas.

strcmp () funkcija:

Ši funkcija lygina dvi eilutes, perduotas funkcijai.

Sintaksė:

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

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

Pavyzdys Grąžinimo vertė Paaiškinimas
strcmp ( „Sveikas pasaulis“, „Sveikas pasaulis“ ) 0 Dvi stygos yra vienodos.
strcmp ( „Sveiki“, „Sveiki \ 0 pasaulis“ ) 0 Stygos lyginamos iki simbolio „\ 0“. Pirmoji eilutė pagal numatytuosius nustatymus baigiasi „\ 0“, o antrojoje eilutėje yra simbolis „\ 0“ po „Sveiki“.
strcmp ( „Sveiki \ 0 \ 0 \ 0“, „Sveiki \ 0 pasaulis“ ) 0 Stygos lyginamos iki simbolio „\ 0“.
strcmp ( „Sveikas pasaulis“, „labas pasaulis“ ) Neigiamas sveikasis skaičius Pirmosios nesuderintos pirmosios eilutės simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)
strcmp („Labas pasaulis“, „labas pasaulis“ ) Teigiamas sveikasis skaičius Pirmosios nesuderintos pirmosios eilutės simbolio („h“) ASCII vertė yra didesnė nei antrosios eilutės („H“)

strncmp () funkcija:

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

Sintaksė:

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

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

Pavyzdys Grąžinimo vertė Paaiškinimas
strncmp ( „Sveikas pasaulis“, „Sveikas pasaulis“, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncmp ( „Sveiki“, „Sveiki \ 0 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 sustabdomas po 5, o ne 8.
strncmp ( „Sveikas pasaulis“, „labas pasaulis“, 5 ) Neigiamas sveikasis skaičius Pirmosios nesuderintos pirmosios eilutės simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)

strcasecmp () funkcija:

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

Sintaksė:

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

Grąžinimo vertė: Taip pat kaip strcmp (), bet stygos traktuojamos kaip neskiriama didžiųjų ir mažųjų raidžių.

Pavyzdys Grąžinimo vertė Paaiškinimas
strcasecmp ( „Sveikas pasaulis“, „Sveikas pasaulis“ ) 0 Dvi stygos yra vienodos.
strcasecmp ( „Sveiki“, „Sveiki \ 0 pasaulis“ ) 0 Stygos lyginamos iki simbolio „\ 0“. Pirmoji eilutė pagal numatytuosius nustatymus baigiasi „\ 0“, o antrojoje eilutėje yra simbolis „\ 0“ po „Sveiki“.
strcasecmp ( „Sveikas pasaulis“, „labas pasaulis“ ) 0 Stygos yra neskiriama didžiųjų ir mažųjų raidžių. Taigi, „Sveikas pasaulis“ ir „labas pasaulis“ yra tas pats.

strncasecmp () funkcija:

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

Sintaksė:

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

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

Pavyzdys Grąžinimo vertė Paaiškinimas
strncasecmp ( „Sveikas pasaulis“, „Sveikas pasaulis“, 5 ) 0 Pirmieji 5 simboliai yra vienodi.
strncasecmp ( „Sveiki“, „Sveiki \ 0 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 sustabdomas po 5, o ne 8.
strncasecmp ( „Sveikas pasaulis“, „labas pasaulis“, 5 ) 0 Stygos yra neskiriama didžiųjų ir mažųjų raidžių. Taigi „Sveiki“ ir „Sveiki“ yra tas pats.

memcmp () funkcija:

Ši funkcija lygina du atminties blokų baitus pagal baitus. Turime perduoti du atminties blokų rodiklius ir baitų skaičių, kad galėtume palyginti.

Sintaksė:

int memcmp (konst. negalioja * str1, konst. negalioja * str2, dydis_t n)

Grąžinimo vertė: Funkcija grąžina 0, jei abu atminties blokai (n baitai) yra lygūs; priešingu atveju jis pateikia skirtumus tarp pirmosios nesuderintos baitų poros (baitai interpretuojami kaip nepasirašyti char objektai, paskui paaukštinami iki int).

Pavyzdys Grąžinimo vertė Paaiškinimas
memcmp ( „Sveikas pasaulis“, „Sveikas pasaulis“, 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 7-asis simbolis skiriasi. Čia palyginimas nesustojo kaip strncmp () kai gaunamas simbolis „\ 0“.
memcmp ( „Sveikas pasaulis“, „labas pasaulis“, 11 ) Neigiamas sveikasis skaičius Pirmosios nesuderintos pirmosios eilutės simbolio („H“) ASCII vertė yra mažesnė nei antrosios eilutės („h“)

Pavyzdys:

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

01. / * eilutėPalyginti.c * /
02.
03. # įtraukti
04. # įtraukti
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Sveiki "," Sveiki \\ 0 pasaulis ") =>% d \ n", strcmp ("Sveiki", "Sveiki \ 0 pasaulis"));
10. printf ("strcmp (" Sveikas pasaulis "," labas pasaulis ") =>% d \ n", strcmp ("Sveikas pasaulis", "labas pasaulis"));
11. printf ("strcmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaulis ") =>% d \ n", strcmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaulis "));
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 (" Sveiki "," Sveiki \\ 0 pasaulis ", 5) =>% d \ n", strncmp ("Sveiki", "Sveiki \ 0 pasaulis", 5));
17. printf ("strncmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaulis ", 8) =>% d \ n", strncmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaulis “, 8));
18. printf ("strncmp (" Labas pasaulis "," labas pasaulis ", 5) =>% d \ n", strncmp ("labas pasaulis", "labas pasaulis", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Sveiki "," Sveiki \\ 0 pasaulis ") =>% d \ n", strcasecmp ("Sveiki", "Sveiki \ 0 pasaulis"));
24. printf ("strcasecmp (" Sveikas pasaulis "," labas pasaulis ") =>% d \ n", strcasecmp ("Sveikas pasaulis", "labas pasaulis"));
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 (" Sveiki "," Sveiki \\ 0 pasaulis ", 5) =>% d \ n", strncasecmp ("Sveiki", "Sveiki \ 0 pasaulis", 5));
30. printf ("strncasecmp (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaulis ", 8) =>% d \ n", strncasecmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki" \ 0 Pasaulis “, 8));
31. printf ("strncasecmp (" Labas pasaulis "," labas pasaulis ", 5) =>% d \ n", strncasecmp ("labas pasaulis", "labas pasaulis", 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 (" Sveiki \\ 0 \\ 0 \\ 0 "," Sveiki \\ 0 pasaulis ", 8) =>% d \ n", memcmp ("Sveiki \ 0 \ 0 \ 0", "Sveiki \ 0 Pasaulis “, 8));
37. printf ("memcmp (" Hello World "," labas pasaulis ", 11) =>% d \ n", memcmp ("Hello World", "labas pasaulis", 11));
38.
39. grąžinti 0; 40.

Išvada:

Taigi, šioje pamokoje pamatėme, kaip stygos gali būti įvairiai lyginamos. Kaip matėme, funkcija stringCompare () nevienodoms eilutėms pateikia -1, tačiau tai galima modifikuoti taip, kad ji grąžintų nesuderinto simbolio ASCII vertę. Galite jį naudoti savo kode, kuris jums labiausiai tinka.

Įdiekite naujausią „Dolecin Emulator“, skirtą „Gamecube“ ir „Wii“, sistemoje „Linux“
„Delfinų emuliatorius“ leidžia žaisti pasirinktus „Gamecube“ ir „Wii“ žaidimus „Linux“ asmeniniuose kompiuteriuose (PC). „Dolphin Emulator“ yra laisv...
Kaip naudoti „GameConqueror Cheat Engine“ sistemoje „Linux“
Straipsnyje pateikiamas „GameConqueror“ apgaulės variklio naudojimo „Linux“ vadove. Daugelis žaidėjų, žaidžiančių sistemoje „Windows“, dažnai naudoja ...
Geriausi „Linux“ žaidimų konsolių emuliatoriai
Šiame straipsnyje bus išvardyta populiari žaidimų konsolių emuliavimo programinė įranga, skirta „Linux“. „Emuliacija“ yra programinės įrangos suderina...