Ne vienas ir ne du C kalbos programuotojai reguliariai susiduria su simbolių masyvų lyginimu. Šiam tikslui yra naudinga strcmp funkcija, kurią šiame straipsnyje ir aptarsime.
Jūsų patogumui, šis straipsnis yra padalintas į keturias dalis.
Funkcijos prototipas:int strcmp(const char *s1, const char *s2);
Grąžinama reikšmė: 0, jeigu simbolių masyvai yra lygūs. Sveikasis skaičius didesnis už 0, jeigu pirmasis masyvas (s1) yra didesnis. Sveikasis skaičius mažesnis už 0, jeigu pirmasis masyvas yra mažesnis.
Parametrų sąrašas: (const char *s1) - pirmasis simbolių masymas, kuris yra tikrinamas.
(const char *s2) - antrasis simbolių masyvas, kuris yra tikrinamas.
rezultatas
Antraščių failas:<string.h>.
1. Funkcija strcmp. Kas tai?
Funkcija strcmp tikrina dviejų masyvų simbolius ir grąžina atitinkamą reikšmę. Grįžtančių reikšmių variantus galite matyte aukščiau esančioje strcmp struktūros lentelėje.
Masyvas yra laikomas didesniu tuo atveju, jeigu pirmas jame esantis elementas nelygus kitam masyvo elementui turi didesnę ASCII reikšmę (raidės 'a' ASCII reikšmė yra 97, o raidės 'b' - 98). Todėl lygindami masyvą, kurio pirmas elementas yra 'a', su masyvu, kurio pirmas elementas yra 'b', iš strcmp funkcijos gautume neigiamą sveikojo skaičiaus reikšmę, kuri indikuotų, jog antras masyvas yra didesnis.
Naudinga žinoti: strcmp funkcija yra aprašyta string.h bibliotekoje, todėl prieš naudodami šią funkciją turime pridėti pastarąją eilutę: #include
<string.h>.
Pavyzdys 1: funkcijos strcmp naudojimas.
#include<string.h>
#include<stdio.h>
intmain(void)
{
printf("1. %d\n",strcmp("Lygu", "Lygu"));
printf("2. %d",strcmp("Lygu", "Nelygu"));
return(0);
}
Galimas rezultatas:
1. 0
2. 1
2. Perrašyta strcmp funkcija
Norėdami perrašyti strcmp funkciją, turime savoje funkcijos versijoje tikrinti gautų masyvų simbolius
tarpusavyje ir grąžinti atitinkamą sveikojo skaičiaus reikšmę. Šiam tikslui galime naudoti while ciklą ir sąlyginį sakinį, kuriame būtų tikrinami masyvų (angl. array) elementai. Tai galite matyti antrame pavyzdyje žemiau.
Pavyzdys 2: C kalba implementuota strcmp funkcija.
intnauja_strcmp(const char* s1, const char* s2)
{
inti = 0;
unsigned char * s1_cpy = (unsigned char* ) s1;
unsigned char * s2_cpy = (unsigned char* ) s2;
while( s1_cpy[i] != '\0' && s2_cpy[i] != '\0')
{
if( s1_cpy[i]== s2_cpy[i] )
i++;
else
break;
}
return (s1_cpy[i] - s2_cpy[i]);
}
Aprašytoje nauja_strcmp funkcijoje viršuje matome sąlyginį sakinį (8-ta eilutė). Šio sakinio sąlyga nustato ar abiejų masyvų elementai yra lygūs. O while ciklas tęsiasi iki kol atrandama nelygybė tarp simbolių (ta pati 8-ta eilutė) arba iki kol pasiekamas paskutinis bent vieno masyvo elementas (6-ta eilutė).
Galiausiai yra grąžinamas skirtumas tarp masyvų simbolių (13-ta eilutė). Jeigu ciklas tęsiasi iki kol abu masyvai pasiekia paskutinį savo simbolį, tada tryliktoje eilutėje yra nustatomas dviejų '\0' simbolių skirtumas ('\0' - '\0' == 0), tai yra nulis. Kitu ciklo baigties atveju, masyvų simboliai nėra lygūs ir yra grąžinama tai indikuojanti reikšmė.
3. Perrašytos strcmp funkcijos testavimas
Pavyzdys 3: Perrašytos strcmp funkcijos testavimas.
Atidus skaitytojas pastebėjo, jog perrašytos ir standartinės strcmp funkcijų rezultatai šiek tiek skiriasi. Funkcija nauja_strcmp grąžina 2, o strcmp grąžina 1. Visgi dvejetas šiuo atveju pilnai patenkina standartinės strcmp funkcijos sąlygą, tai yra grąžintas sveikasis skaičius turi būti didesnis už 0, jeigu pirmasis masyvas yra didesnis ('N' - 'L' == 2).
4. Žinių patikrinimas
Funkcija strcmp C programavimo kalboje
1Koks yra strcmp("quizCoder", "quizCoder") rezultatas?
2Kurioje bibliotekoje yra aprašyta strcmp funkcija?