Jonojen vertailu: C -ohjelmointi

String Comparison C Programming



Merkkijono C -kielellä on merkkijono, joka päättyy nollamerkkiin ( 0). Tämän ominaisuuden merkkijonoja verrataan.







Kahta merkkijonoa voidaan verrata eri tavoin. Tässä opetusohjelmassa näemme ensin käyttäjän määrittämän funktion kahden merkkijonon vertaamiseksi, ja sitten näemme joitain sisäänrakennettuja kirjastotoimintoja, joita voidaan käyttää kahden merkkijonon vertaamiseen erittäin helposti. Aloitetaan siis.



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

Kirjoitamme funktion stringCompare () kielten vertailuun. Käymme merkkijonojen läpi ja vertaamme merkkijonon kutakin merkkiä, kunnes saavutamme yhden tai molemmat tai yhden epäsopivan. Jos läpivienti saavutetaan molempien merkkijonojen loppuun, merkkijonot sovitetaan yhteen; muuten merkkijonot eivät täsmää.



01./* userDefinedFunction.c*/
02.
03.#sisältää
04.
05.intstringCompare( hiiltyästr1[ ], hiiltyästr2[ ] )
06.{
07.inti=0;
08.
09. sillä aikaa(str1[i] ==str2[i] )
10.
viisitoista.
16.jos(str1[i] == '' 0'' &&str2[i] == '' 0'' )
17.palata 0;
18.muu
19.palata -1;
kaksikymmentä.
kaksikymmentäyksi.}
22.
2. 3.
24.inttärkein()
25.{
26.hiiltyästr1[30],str2[30];
27.
28. printf ('Kirjoita ensimmäinen merkkijono:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Kirjoita toinen merkkijono:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.jos(stringCompare(str1,str2) == 0)
3. 4. printf ('Jouset ovat yhtä suuret n'');
35.muu
36. printf ('Jouset eivät ole tasavertaisia n'');
37.
38.palata 0; 39.}





Täällä kiertämme merkkijonoja käyttämällä while -silmukkaa ja muuttujaa i . Kun merkit ovat samat molempien merkkijonojen samassa paikassa, arvo on i suurennetaan yhdellä (rivi 13). Jos merkit eivät ole yhtä suuret (rivi 09) tai saavutamme merkkijonon loppuun (rivi 11), while -silmukka on tauko. Silmäsilmukan jälkeen tarkistamme, onko merkkijonojen läpivienti saavutettu loppuun vai ei (rivi 16). Jos kulku saavutetaan molempien merkkijonojen loppuun, merkkijonot ovat yhtä suuret, muuten eivät.

Merkkijonojen vertailu sisäänrakennettujen kirjastotoimintojen avulla:

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



strcmp () -funktio:

Tämä funktio vertaa kahta funktiolle välitettyä merkkijonoa.

Syntaksi :

int strcmp (const hiiltyä *str1, const hiiltyä *str2)

Palautusarvo: Palauta 0, jos merkkijonot ovat yhtä suuret. Palauta negatiivinen kokonaisluku, jos ensimmäisen merkkijonon ensimmäisen parittoman 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 täsmäytymättömän merkin ASCII -arvon eron ja jotkin järjestelmät -1, jos ensimmäisen merkkijonon ensimmäisen täsmäämättömän merkin ASCII -arvo on pienempi kuin toinen merkkijono ja palauttavat 1, jos ensimmäinen merkkijono on suurempi kuin toinen merkkijono.

Esimerkki Palauta arvo Selitys
strcmp ( Hei maailma, hei maailma ) 0 Kaksi merkkijonoa on sama.
strcmp ( Hei, Hei 0 Maailma ) 0 Merkkijonoja verrataan merkkiin ' 0'. Ensimmäinen merkkijono päättyy oletusarvoisesti ' 0' ja toinen merkkijono sisältää ' 0' -merkin 'hei' jälkeen.
strcmp ( Hei 0 0 0 ', hei 0 World ) 0 Merkkijonoja verrataan merkkiin ' 0'.
strcmp ( Hei maailma, hei maailma ) Negatiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen vertaansa vailla olevan merkin ('H') ASCII -arvo on pienempi kuin toisen merkkijonon ('h')
strcmp ( hei maailma, hei maailma ) Positiivinen kokonaisluku Ensimmäisen merkkijonon ensimmäisen vertaansa vailla olevan merkin ('h') ASCII -arvo 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 antamalla funktiolle ylimääräinen argumentti.

Syntaksi:

int strncmp (const hiiltyä *str1, const hiiltyä *str2, koko_tn)

Palautusarvo: Toiminto palaa 0 jos ensimmäinen n merkkijonot ovat yhtä suuret; muussa tapauksessa se palauttaa negatiivisen tai positiivisen kokonaisluvun riippuen siitä, kuinka ensimmäisen erotetun merkin ASCII -arvon erot ovat merkkejä.

Esimerkki Palauta arvo 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 World, 8 ) 0 ' 0' on kummankin merkkijonon 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 vertaansa vailla olevan merkin ('H') ASCII -arvo on pienempi kuin toisen merkkijonon ('h')

strcasecmp () -funktio:

Tämä toiminto on samanlainen kuin toiminto strcmp () mutta tässä merkkijonot eivät erota kirjainkokoa.

Syntaksi:

intstrcasecmp(const hiiltyä *str1, const hiiltyä *str2)

Palautusarvo: Sama kuin strcmp () , mutta merkkijonoja käsitellään kirjainkoosta riippumaton .

Esimerkki Palauta arvo Selitys
strcasecmp ( Hei maailma, hei maailma ) 0 Kaksi merkkijonoa on sama.
strcasecmp ( Hei, Hei 0 Maailma ) 0 Merkkijonoja verrataan merkkiin ' 0'. Ensimmäinen merkkijono päättyy oletusarvoisesti ' 0' ja toinen merkkijono sisältää ' 0' -merkin 'hei' -merkin jälkeen.
strcasecmp ( Hei maailma, hei maailma ) 0 Jouset ovat kirjainkoosta riippumaton. Hei maailma ja hei maailma ovat siis sama asia.

strncasecmp () -funktio:

Tämä toiminto on samanlainen kuin toiminto strncmp () mutta tässä merkkijonot eivät erota kirjainkokoa.

Syntaksi:

intstrncasecmp(const hiiltyä *str1, const hiiltyä *str2)

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

Esimerkki Palauta arvo 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 World, 8 ) 0 ' 0' on kummankin merkkijonon 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 sama asia.

funktio memcmp ():

Tämä toiminto vertaa kahta muistilohkoa tavua tavulta. Meidän on välitettävä kaksi osoitinta muistilohkoista ja tavujen määrä vertailtavaksi.

Syntaksi:

int memcmp (const mitätön *str1, const mitätön *str2, koko_tn)

Palautusarvo: Toiminto palauttaa arvon 0, jos kaksi muistilohkoa ( n tavua) ovat yhtä suuret; muussa tapauksessa se palauttaa erot ensimmäisen täsmäytymättömän tavuparin välillä (tavuja tulkitaan allekirjoittamattomiksi char -objekteiksi ja ylennetään sitten int).

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

Esimerkki:

Seuraavassa on C -koodiesimerkki kaikista käsitellyistä toiminnoista.

01./*stringCompare.c*/
02.
03.#sisältää
04.#sisältää
05.
06.inttärkein()
07.{
08. printf ('strcmp ('Hei maailma','Hei maailma') => %d n'', strcmp ( 'Hei maailma','Hei maailma' ));
09. printf ('strcmp ('Hei','Hei\0Maailman') => %d n'', strcmp ( 'Hei','Hei 0Maailman' ));
10. printf ('strcmp ('Hei maailma','Hei maailma') => %d n'', strcmp ( 'Hei maailma','Hei maailma' ) );
yksitoista. printf ('strcmp ('Hei\0\0\0','Hei\0Maailman') => %d n'', strcmp ( 'Hei 0 0 0'','Hei 0Maailman' ));
12.
13. printf ('' n--------------- n'');
14.
viisitoista. printf ('strncmp ('Hei maailma','Hei maailma', 5) => %d n'', strncmp ( 'Hei maailma','Hei maailma',5 ));
16. printf ('strncmp ('Hei','Hei\0Maailman', 5) => %d n'', strncmp ( 'Hei','Hei 0Maailman',5 ));
17. printf ('strncmp ('Hei\0\0\0','Hei\0Maailman', 8) => %d n'', strncmp ( 'Hei 0 0 0'','Hei 0Maailman',8 ));
18. printf ('strncmp ('Hei maailma','Hei maailma', 5) => %d n'', strncmp ( 'Hei maailma','Hei maailma',5 ));
19.
kaksikymmentä. printf ('' n--------------- n'');
kaksikymmentäyksi.
22. printf ('strcasecmp ('Hei maailma','Hei maailma') => %d n'',strcasecmp( 'Hei maailma','Hei maailma' ));
2. 3. printf ('strcasecmp ('Hei','Hei\0Maailman') => %d n'',strcasecmp( 'Hei','Hei 0Maailman' ));
24. printf ('strcasecmp ('Hei maailma','Hei maailma') => %d n'',strcasecmp( 'Hei maailma','Hei maailma' ));
25.
26. printf ('' n--------------- n'');
27.
28. printf ('strncasecmp ('Hei maailma','Hei maailma', 5) => %d n'',strncasecmp( 'Hei maailma','Hei maailma',5 ) );
29. printf ('strncasecmp ('Hei','Hei\0Maailman', 5) => %d n'',strncasecmp( 'Hei','Hei 0Maailman',5 ));
30. printf ('strncasecmp ('Hei\0\0\0','Hei\0Maailman', 8) => %d n'',strncasecmp( 'Hei 0 0 0'','Hei 0Maailman',8 ));
31. printf ('strncasecmp ('Hei maailma','Hei maailma', 5) => %d n'',strncasecmp( 'Hei maailma','Hei maailma',5 ));
32.
33. printf ('' n--------------- n'');
3. 4.
35. printf ('memcmp ('Hei maailma','Hei maailma', 5) => %d n'', memcmp ( 'Hei maailma','Hei maailma',5 ) );
36. printf ('memcmp ('Hei\0\0\0','Hei\0Maailman', 8) => %d n'', memcmp ( 'Hei 0 0 0'','Hei 0Maailman',8 ));
37. printf ('memcmp ('Hei maailma','Hei maailma', 11) => %d n'', memcmp ( 'Hei maailma','Hei maailma',yksitoista ));
38.
39.palata 0; 40.}

Johtopäätös:

Joten tässä opetusohjelmassa olemme nähneet, kuinka merkkijonoja voidaan verrata eri tavoin. Kuten olemme nähneet, stringCompare () -funktio palauttaa -1 epätasaisille merkkijonoille, mutta tätä voidaan muuttaa niin, että se palauttaa virheellisen merkin ASCII -arvon. Voit käyttää sitä koodissasi, joka sopii sinulle parhaiten.