C-keeles stringide võrdlemisel, mida sina kasutad? strcmp
on funktsioon, mis kontrollib, kas kaks stringi on samad – justkui küsiks programmilt: „Kas need kaks on samad?“ Muidugi ei suuda programm otsustada, kas kassid või koerad on armsamad, aga vähemalt suudab ta eristada „HELLO“ ja „hello“ erinevust. Selles artiklis selgitame strcmp
funktsiooni tööpõhimõtet, kasutusviisi ja levinumaid vigu.
1. Mis on strcmp funktsioon?
strcmp
funktsioon võrdleb kahte stringi märkhaaval ja tagastab tulemuse täisarvuna. Funktsioon töötab järgmiselt:
- 0: kui stringid on identsed
- Positiivne väärtus: kui esimene string on sõnastikulises järjekorras pärast teist
- Negatiivne väärtus: kui esimene string on sõnastikulises järjekorras enne teist
See funktsioon võimaldab mitte ainult kontrollida, kas stringid on samad, vaid ka määrata, kumb neist on eespool. Programmis saab seda kasutada järgmiselt:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
printf("strcmp tulemuseks on: %d\n", result);
return 0;
}
Ülaltoodud kood võrdleb “Hello” ja “World” ning kuvab tulemuse. Tähtis on märkida, et strcmp
eristab suuri ja väikseid tähti, seega „HELLO“ ja „hello“ loetakse erinevateks stringideks.
2. Kuidas strcmp funktsioon töötab?
strcmp
tööpõhimõte on lihtne, kuid võimas. See võrdleb kahte stringi alustades esimesest märgist, märkhaaval, ning tagastab erinevuse niipea, kui leitakse erinevad märgid. Seda loogikat kasutatakse ka tähestikulise järjestuse määramiseks. Näiteks kui võrrelda “apple” ja “banana”, võrdleb strcmp
esmalt “a” ja “b”, ning tagastab negatiivse väärtuse.
Allpool on näide programmist, mis aitab strcmp
toimimist paremini mõista:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Stringid on identsed.\n");
} else if (result < 0) {
printf("str1 tuleb enne str2.\n");
} else {
printf("str1 tuleb pärast str2.\n");
}
return 0;
}
See kood võrdleb stringe “apple” ja “banana”. Tulemuseks näitab strcmp
, et “apple” tuleb sõnastikus enne “banana”. See funktsioon on väga kasulik näiteks stringide tähestikulises järjekorras sorteerimisel.

3. strcmp funktsiooni kasutusnäited
1. Kasutaja sisendi kontrollimine
strcmp
on kasulik, kui soovid võrrelda kasutaja sisestatud andmeid olemasolevate andmetega. Näiteks saab seda kasutada parooli vastavuse kontrollimiseks.
#include <stdio.h>
#include <string.h>
int main() {
char password[] = "secret";
char input[256];
printf("Sisesta parool: ");
scanf("%s", input);
if (strcmp(password, input) == 0) {
printf("Parool sobib.\n");
} else {
printf("Parool on vale.\n");
}
return 0;
}
See programm võrdleb sisestatud parooli ja õiget parooli strcmp
abil.
2. Sõnastikulise järjekorra määramine
Ka stringide tähestikulise sortimise puhul on strcmp
väga kasulik. Kui sul on mitu sõna, saad strcmp
abil kindlaks teha, kumb neist peaks tulema eespool.
4. strcmp funktsiooni alternatiivid
strcmp
on väga kasulik, kuid mõnel juhul võib olla mõistlik kaaluda ka teisi funktsioone, sõltuvalt kasutusotstarbest.
strncmp: osalise stringi võrdlemine
strncmp
kasutatakse siis, kui soovid võrrelda ainult osa stringist. Näiteks saab võrrelda vaid esimese kolme tähe ulatuses.
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apricot";
if (strncmp(str1, str2, 3) == 0) {
printf("Esimesed 3 tähte ühtivad.\n");
} else {
printf("Esimesed 3 tähte ei ühti.\n");
}
return 0;
}
memcmp: mälu võrdlemine
memcmp
on funktsioon, mida kasutatakse mitte ainult stringide, vaid üldiselt mäluplokkide võrdlemiseks. See on eriti kasulik, kui on vaja võrrelda binaarandmeid.
5. Levinumad vead
1. Suurte ja väikeste tähtede erinevuse eiramine
strcmp
eristab suuri ja väikeseid tähti. Näiteks käsitleb ta “HELLO” ja “hello” kui erinevaid stringe. Kui vajad võrdlust, mis ei sõltu tähesuurusest, tasub kaaluda strcasecmp
kasutamist.
2. NULL-viidete võrdlemine
Kui strcmp
funktsioonile antakse NULL-viide, võib programm kokku joosta (crash). On väga oluline kontrollida, kas võrreldavad stringid on korralikult initsialiseeritud ja mitte tühjad (NULL).
Kokkuvõte
strcmp
on väga oluline funktsioon C-keeles, mis võimaldab lihtsalt stringe võrrelda. Artiklis tutvustasime selle kasutamist parooli kontrollimisel ja stringide sorteerimisel ning tõime välja reaalseid näiteid. Kui tegeled stringide töötlusega programmis, tasub kindlasti strcmp
võimalusi ise järele proovida.