C Ohjelmointi

Merkkijonovertailun C ohjelmointi

Merkkijonovertailun C ohjelmointi
C-kielinen merkkijono on merkkijono, joka päättyy nollamerkkiin (\ 0). Tämän ominaisuuden merkkijonoja verrataan.

Kaksi merkkijonoa voidaan verrata eri tavoin. Tässä opetusohjelmassa näemme ensin käyttäjän määrittelemän funktion kahden merkkijonon vertaamiseksi, ja sitten näemme joitain sisäänrakennettuja kirjastofunktioita, joita voidaan käyttää kahden merkkijonon vertaamiseen erittäin helposti. Joten, aloitetaan.

Merkkijonojen vertailu käyttäjän määrittämällä toiminnolla:

Kirjoitamme funktion stringCompare () verrata merkkijonoja. Liikutamme merkkijonoja ja verrataan merkkijonon jokaista merkkiä, kunnes saavutamme jonkun tai molemmat tai yksi yhteensopimattomista löydetään. Jos kulku saavutetaan molempien merkkijonojen loppuun, merkkijonot sovitetaan yhteen; muuten merkkijonot eivät sovi yhteen.

01. / * userDefinedFunction.c * /
02.
03. #sisältää
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. kun (str1 [i] == str2 [i])
10.
11. jos (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. tauko;
13. i ++;
14.
15.
16. jos (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. paluu 0;
18. muu
19. paluu -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Syötä ensimmäinen merkkijono:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Syötä toinen merkkijono:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("Merkkijonot ovat samat \ n");
35. muu
36. printf ("Merkkijonot eivät ole yhtä suuret \ n");
37.
38. paluu 0; 39.

Tässä kulkemme merkkijonot käyttämällä while-silmukkaa ja muuttujaa i. Kun merkit ovat samat molempien merkkijonojen samassa paikassa, arvon arvo on i kasvaa yhdellä (rivi 13). Jos merkit eivät ole yhtä suuret (rivi 09) tai pääsemme merkkijonon loppuun (rivi 11), while-silmukka on tauko. Silmukan jälkeen tarkistamme, että molemmat merkkijonon liikkeet on saavutettu loppuun tai ei (rivi 16). Jos kulku saavutetaan molempien merkkijonojen loppuun, merkkijonot ovat samat, muuten eivät.

Merkkijonojen vertailu käyttämällä sisäänrakennettuja kirjastotoimintoja:

Seuraavia kirjastotoimintoja voidaan käyttää merkkijonojen vertailussa. Kaikki toiminnot on ilmoitettu merkkijono.h otsikkotiedosto.

strcmp () -toiminto:

Tämä toiminto vertaa kahta funktiolle siirrettyä merkkijonoa.

Syntaksi:

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

Palautusarvo: Palauta 0, jos merkkijonot ovat samat. Palauta negatiivinen kokonaisluku, jos ensimmäisen merkkijonon ensimmäisen vastaamattoman merkin ASCII-arvo on pienempi kuin toinen merkkijono. Palauta positiivinen kokonaisluku, jos ensimmäisen merkkijonon ensimmäisen vastaamattoman merkin ASCII-arvo on suurempi kuin toinen merkkijono. Jotkut järjestelmät palauttavat ensimmäisen yhteensopimattoman merkin ASCII-arvon eron ja jotkut järjestelmät palauttavat -1, jos ensimmäisen merkkijonon ensimmäisen vastaamattoman merkin ASCII-arvo on pienempi kuin toinen merkkijono ja palauttaa 1, jos ensimmäinen merkkijono on suurempi kuin toinen merkkijono.

Esimerkki Palautusarvo Selitys
strcmp ( "Hei maailma", "Hei maailma" ) 0 Kaksi merkkijonoa ovat samat.
strcmp ( "Hei", "Hei \ 0 maailma" ) 0 Merkkijonoja verrataan merkkiin '\ 0'. Oletusarvon mukaan ensimmäinen merkkijono päättyy merkkijonoon \ 0, ja toinen merkkijono sisältää merkin \ 0 merkin 'Hello' jälkeen.
strcmp ( "Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma" ) 0 Merkkijonoja verrataan merkkiin '\ 0'.
strcmp ( "Hei maailma", "Hei maailma" ) Negatiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen yhdistämättömän merkin ('H') ASCII-arvo on pienempi kuin toisen merkkijonon ('h')
strcmp ("Hei maailma", "Hei maailma" ) Positiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen vastaamattoman merkin ASCII-arvo ('h') on suurempi kuin toinen merkkijono ('H')

strncmp () -toiminto:

Tämä toiminto on samanlainen kuin toiminto strcmp (), mutta tässä meidän on määritettävä, kuinka monta tavua verrataan välittämällä ylimääräinen argumentti funktiolle.

Syntaksi:

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

Palautusarvo: Toiminto palaa 0 jos ensimmäinen n kahden merkkijonon merkit ovat samat; muuten se palauttaa negatiivisen tai positiivisen kokonaisluvun riippuen merkistä eroja ensimmäisen yhteensopimattoman merkin ASCII-arvon välillä.

Esimerkki Palautusarvo Selitys
strncmp ( ”Hei maailma”, ”Hei maailma”, 5 ) 0 Ensimmäiset 5 merkkiä ovat samat.
strncmp ( "Hei", "Hei \ 0 maailma", 5 ) 0 Ensimmäiset 5 merkkiä ovat samat.
strncmp ( "Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma", 8 ) 0 '\ 0' on molempien merkkijonojen viiden ensimmäisen merkin jälkeen. Joten vertailu lopetetaan 5 eikä 8 jälkeen.
strncmp ( "Hei maailma", "hei maailma", 5 ) Negatiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen yhdistämättömän merkin ('H') ASCII-arvo on pienempi kuin toisen merkkijonon ('h')

strcasecmp () -toiminto:

Tämä toiminto on samanlainen kuin toiminto strcmp (), mutta tässä merkkijonot eivät erottele isoja ja pieniä kirjaimia.

Syntaksi:

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

Palautusarvo: Sama kuin strcmp (), mutta merkkijonoja kohdellaan kuten kirjainkoosta riippumaton.

Esimerkki Palautusarvo Selitys
strcasecmp ( "Hei maailma", "Hei maailma" ) 0 Kaksi merkkijonoa ovat samat.
strcasecmp ( "Hei", "Hei \ 0 maailma" ) 0 Merkkijonoja verrataan merkkiin '\ 0'. Ensimmäinen merkkijono päättyy oletuksena merkkijonolla \ 0, ja toinen merkkijono sisältää merkin \ \ "Hello" jälkeen.
strcasecmp ( "Hei maailma", "hei maailma" ) 0 Jouset ovat kirjainkoosta riippumaton. Joten "Hello World" ja "hello World" ovat samat.

strncasecmp () -toiminto:

Tämä toiminto on samanlainen kuin toiminto strncmp (), mutta tässä merkkijonot eivät erottele isoja ja pieniä kirjaimia.

Syntaksi:

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

Palautusarvo: Sama kuin strncmp (), kun merkkijonoja käsitellään kirjainkoon mukaan.

Esimerkki Palautusarvo Selitys
strncasecmp ( "Hei maailma", "Hei maailma", 5 ) 0 Ensimmäiset 5 merkkiä ovat samat.
strncasecmp ( "Hei", "Hei \ 0 maailma", 5 ) 0 Ensimmäiset 5 merkkiä ovat samat.
strncasecmp ( "Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma", 8 ) 0 '\ 0' on molempien merkkijonojen viiden ensimmäisen merkin jälkeen. Joten vertailu lopetetaan 5 eikä 8 jälkeen.
strncasecmp ( "Hei maailma", "hei maailma", 5 ) 0 Jouset ovat kirjainkoosta riippumaton. Joten "Hei" ja "Hei" ovat samat.

memcmp () -toiminto:

Tämä toiminto vertaa kahta muistilohkotavua tavuittain. Meidän on välitettävä kaksi muistilohkojen osoitinta ja tavujen määrä vertailtavaksi.

Syntaksi:

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

Palautusarvo: Funktio palauttaa arvon 0, jos molemmat muistilohkot (n tavua) ovat yhtä suuret; muuten se palauttaa erot ensimmäisen tavuttamattoman tavuparin välillä (tavut tulkitaan merkitsemättöminä char-objekteina, sitten ne korotetaan int: ksi).

Esimerkki Palautusarvo Selitys
memcmp ( "Hei maailma", "Hei maailma", 5 ) 0 Ensimmäiset 5 merkkiä ovat samat.
memcmp ( "Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma", 8 ) Negatiivinen kokonaisluku Ensimmäiset 6 merkkiä ovat samat, mutta seitsemäs merkki on erilainen. Tässä vertailu ei pysähtynyt kuten strncmp () kun saat \ '0 -merkin.
memcmp ( "Hei maailma", "Hei maailma", 11 ) Negatiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen vastaamattoman merkin ('H') ASCII-arvo on pienempi kuin toisen merkkijonon ('h')

Esimerkki:

Seuraavassa on kaikkien keskusteltujen toimintojen C-koodiesimerkki.

01. / * stringCompare.c * /
02.
03. #sisältää
04. #sisältää
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Hei "," Hei \\ 0 maailma ") =>% d \ n", strcmp ("Hei", "Hei \ 0 maailma"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Hei \\ 0 \\ 0 \\ 0 "," Hei \\ 0 maailma ") =>% d \ n", strcmp ("Hei \ 0 \ 0 \ 0", "Hei \ 0 Maailma "));
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 (" Hei "," Hei \\ 0 maailma ", 5) =>% d \ n", strncmp ("Hei", "Hei \ 0 maailma", 5));
17. printf ("strncmp (" Hei \\ 0 \\ 0 \\ 0 "," Hei \\ 0 maailma ", 8) =>% d \ n", strncmp ("Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma ", 8));
18. printf ("strncmp (" Hei maailma "," Hei maailma ", 5) =>% d \ n", strncmp ("Hei maailma", "Hei maailma", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World"));
23. printf ("strcasecmp (" Hei "," Hei \\ 0 maailma ") =>% d \ n", strcasecmp ("Hei", "Hei \ 0 maailma"));
24. printf ("strcasecmp (" Hello World "," hello World ") =>% d \ n", strcasecmp ("Hello World", "hello World"));
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 (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncasecmp ("Hello", "Hello \ 0 World", 5));
30. printf ("strncasecmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello" \ 0 maailma ", 8));
31. printf ("strncasecmp (" Hei maailma "," Hei maailma ", 5) =>% d \ n", strncasecmp ("Hei maailma", "Hei maailma", 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 (" Hei \\ 0 \\ 0 \\ 0 "," Hei \\ 0 maailma ", 8) =>% d \ n", memcmp ("Hei \ 0 \ 0 \ 0", "Hei \ 0 maailma ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. paluu 0; 40.

Päätelmä:

Joten tässä opetusohjelmassa olemme nähneet, kuinka merkkijonoja voidaan verrata eri tavoin. Kuten olemme nähneet, stringCompare () -funktio palauttaa -1 epätasaisten merkkijonojen kohdalla, mutta tätä voidaan muokata siten, että se palauttaa yhteensopimattoman merkin ASCII-arvon. Voit käyttää sitä koodissasi, joka sopii sinulle parhaiten.

How to change Left & Right mouse buttons on Windows 10 PC
It's quite a norm that all computer mouse devices are ergonomically designed for right-handed users. But there are mouse devices available which are s...
Emulate Mouse clicks by hovering using Clickless Mouse in Windows 10
Using a mouse or keyboard in the wrong posture of excessive usage can result in a lot of health issues, including strain, carpal tunnel syndrome, and ...
Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...