Húr összehasonlítás: C programozás

String Comparison C Programming



A C nyelvű karakterlánc karakterek tömbje, amely null karakterrel ( 0) fejeződik be. Ennek a tulajdonságnak a használatával karakterláncok összehasonlítása.







Két karakterláncot különböző módon lehet összehasonlítani. Ebben az oktatóanyagban először egy felhasználó által definiált függvényt fogunk látni két karakterlánc összehasonlítására, majd néhány beépített könyvtári függvényt, amelyek segítségével két karakterlánc nagyon könnyen összehasonlítható. Szóval, kezdjük.



Karakterlánc-összehasonlítás felhasználó által definiált függvény használatával:

Funkciót írunk stringCompare () a húrok összehasonlításához. Végigjárjuk a karakterláncokat, és összehasonlítjuk a karakterlánc minden karakterét, amíg el nem érjük bármelyik végét, vagy mindkettőt, vagy egy nem megfelelőt. Ha a bejárást mindkét húr végére érjük, akkor a húrok illeszkednek; különben a karakterláncok nem egyeznek.



01./*userDefinedFunction.c*/
02.
03.#befoglalni
04.
05.intstringCompare( charstr1[ ], charstr2[ ] )
06.{
07.intén=0;
08.
09. míg(str1[én] ==str2[én] )
10.
tizenöt.
16.ha(str1[én] == ' 0' &&str2[én] == ' 0' )
17.Visszatérés 0;
18.más
19.Visszatérés -1;
húsz.
huszonegy.}
22.
2. 3.
24.intfő-()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Írja be az első karakterláncot:');
29. scanf ('% [^ n]% * c ',str1);
30. printf ('Írja be a második karakterláncot:');
31. scanf ('% [^ n]% * c ',str2);
32.
33.ha(stringCompare(str1,str2) == 0)
3. 4. printf (- A húrok egyenlők n');
35.más
36. printf (- A húrok nem egyenlők n');
37.
38.Visszatérés 0; 39.}





Itt a while ciklus és egy változó használatával keresztezzük a karakterláncokat én . Ha mindkét karakterlánc azonos pozíciójában a karakterek azonosak, akkor a én 1 -gyel növekszik (13. sor). Ha a karakterek nem egyenlőek (09. sor), vagy elértük a karakterlánc végét (11. sor), akkor a while ciklus szünet. A while ciklus után ellenőrizzük, hogy mindkét karakterlánc áthalad -e a végére vagy sem (16. sor). Ha a bejárást mindkét húr végére érjük, akkor a húrok egyenlők, különben nem.

Karakterlánc-összehasonlítás a beépített könyvtári funkciók használatával:

A következő könyvtári függvények használhatók a karakterláncok összehasonlítására. Az összes funkció deklarálva van a húr.h fejléc fájl.



strcmp () függvény:

Ez a függvény két, a függvényhez átadott karakterláncot hasonlít össze.

Szintaxis :

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

Visszaadási érték: Ha a karakterláncok egyenlők, adja vissza a 0 értéket. Negatív egész számot adjon vissza, ha az első karakterlánc első párosítatlan karakterének ASCII értéke kisebb, mint a második karakterlánc. Pozitív egész számot adjon vissza, ha az első karakterlánc első páratlan karakterének ASCII értéke nagyobb, mint a második karakterlánc. Egyes rendszerek az első nem egyező karakter ASCII -értékének különbségét adják vissza, egyesek pedig -1 -et, ha az első karakterlánc első egyeztetetlen karakterének ASCII -értéke kisebb, mint a második karakterlánc, és 1 -et adnak vissza, ha a az első karakterlánc nagyobb, mint a második.

Példa Visszaadott érték Magyarázat
strcmp ( Hello World, Hello World ) 0 Két húr ugyanaz.
strcmp ( Helló, hello 0 World ) 0 A karakterláncokat a „ 0” karakterig kell összehasonlítani. Az első karakterlánc alapértelmezés szerint „ 0” -vel végződik, a második pedig a „Hello” után található „ 0” karaktert tartalmazza.
strcmp ( Szia 0 0 0 ″, Hello 0 World ) 0 A karakterláncokat a „ 0” karakterig kell összehasonlítani.
strcmp ( Hello World, hello World ) Negatív egész szám Az első karakterlánc első párosítatlan karakterének („H”) ASCII értéke kisebb, mint a második karakterlánc („h”)
strcmp ( hello World, Hello World ) Pozitív egész szám Az első karakterlánc első páratlan karakterének („h”) ASCII értéke nagyobb, mint a második karakterlánc („H”)

strncmp () függvény:

Ez a funkció hasonló a funkcióhoz strcmp () , de itt meg kell adnunk, hogy hány bájtot hasonlítunk össze, ha egy extra argumentumot adunk át a függvénynek.

Szintaxis:

int strncmp (const char *str1, const char *str2, size_tn)

Visszaadási érték: A függvény visszatér 0 ha az első n a két karakterlánc karaktere egyenlő; ellenkező esetben negatív vagy pozitív egész számot ad vissza az első nem egyező karakter ASCII értéke közötti különbségek előjelétől függően.

Példa Visszaadott érték Magyarázat
strncmp ( Hello World, Hello World, 5 ) 0 Az első 5 karakter ugyanaz.
strncmp ( Sziasztok, Hello 0 World, 5 ) 0 Az első 5 karakter ugyanaz.
strncmp ( Szia 0 0 0 ″, Hello 0 World, 8 ) 0 A „ 0” mindkét karakterlánc első 5 karaktere után található. Tehát az összehasonlítás 5 és 8 után leáll.
strncmp ( Hello World, hello World, 5 ) Negatív egész szám Az első karakterlánc első párosítatlan karakterének („H”) ASCII értéke kisebb, mint a második karakterlánc („h”)

strcasecmp () függvény:

Ez a funkció hasonló a funkcióhoz strcmp () , de itt a karakterláncok nem különböztetik meg a kis- és nagybetűket.

Szintaxis:

intstrcasecmp(const char *str1, const char *str2)

Visszaadási érték: Ugyanaz, mint a strcmp () , de a karakterláncokat úgy kezeljük megkülönböztetve a kis- és nagybetűket .

Példa Visszaadott érték Magyarázat
strcasecmp ( Hello World, Hello World ) 0 Két húr ugyanaz.
strcasecmp ( Helló, hello 0 World ) 0 A karakterláncokat a „ 0” karakterig kell összehasonlítani. Az első karakterlánc alapértelmezés szerint ' 0' -vel végződik, a második pedig a 'Hello' után a ' 0' karaktert tartalmazza.
strcasecmp ( Hello World, hello World ) 0 A húrok azok megkülönböztetve a kis- és nagybetűket. Tehát a Hello World és a Hello World ugyanaz.

strncasecmp () függvény:

Ez a funkció hasonló a funkcióhoz strncmp () , de itt a karakterláncok nem különböztetik meg a kis- és nagybetűket.

Szintaxis:

intstrncasecmp(const char *str1, const char *str2)

Visszaadási érték: Ugyanaz, mint a strncmp () , ha a karakterláncokat kis- és nagybetűk megkülönböztetésével kezelik.

Példa Visszaadott érték Magyarázat
strncasecmp ( Hello World, Hello World, 5 ) 0 Az első 5 karakter ugyanaz.
strncasecmp ( Sziasztok, Hello 0 World, 5 ) 0 Az első 5 karakter ugyanaz.
strncasecmp ( Szia 0 0 0 ″, Hello 0 World, 8 ) 0 A „ 0” mindkét karakterlánc első 5 karaktere után található. Tehát az összehasonlítás 5 és 8 után leáll.
strncasecmp ( Hello World, hello World, 5 ) 0 A húrok azok megkülönböztetve a kis- és nagybetűket. Tehát a Hello és a hello ugyanaz.

memcmp () függvény:

Ez a funkció két memóriablokkot hasonlít össze byte byte -onként. Át kell adnunk két mutatót a memóriablokkokról és az összehasonlítandó bájtok számáról.

Szintaxis:

int memcmp (const üres *str1, const üres *str2, size_tn)

Visszaadási érték: A függvény 0 -t ad vissza, ha a két memóriablokk ( n bájt) egyenlő; ellenkező esetben visszaadja az első nem megfelelő bájtpár közötti különbségeket (a bájtokat aláírás nélküli karakteres objektumként értelmezik, majd int -re léptetik).

Példa Visszaadott érték Magyarázat
memcmp ( Hello World, Hello World, 5 ) 0 Az első 5 karakter ugyanaz.
memcmp ( Szia 0 0 0 ″, Hello 0 World, 8 ) Negatív egész szám Az első 6 karakter ugyanaz, de a 7. karakter más. Itt az összehasonlítás nem állt meg strncmp () amikor „ 0” karaktert kap.
memcmp ( Hello World, hello World, 11 ) Negatív egész szám Az első karakterlánc első párosítatlan karakterének („H”) ASCII értéke kisebb, mint a második karakterlánc („h”)

Példa:

Az alábbiakban az összes tárgyalt funkció C -példája látható.

01./*stringCompare.c*/
02.
03.#befoglalni
04.#befoglalni
05.
06.intfő-()
07.{
08. printf ('strcmp ('Helló Világ','Helló Világ') => %d n', strcmp ( 'Helló Világ','Helló Világ' ));
09. printf ('strcmp ('Helló','Helló\0Világ') => %d n', strcmp ( 'Helló','Helló 0Világ' ));
10. printf ('strcmp ('Helló Világ','Helló Világ') => %d n', strcmp ( 'Helló Világ','Helló Világ' ) );
tizenegy. printf ('strcmp ('Helló\0\0\0','Helló\0Világ') => %d n', strcmp ( 'Helló 0 0 0','Helló 0Világ' ));
12.
13. printf (' n--------------- n');
14.
tizenöt. printf ('strncmp ('Helló Világ','Helló Világ', 5) => %d n', strncmp ( 'Helló Világ','Helló Világ',5 ));
16. printf ('strncmp ('Helló','Helló\0Világ', 5) => %d n', strncmp ( 'Helló','Helló 0Világ',5 ));
17. printf ('strncmp ('Helló\0\0\0','Helló\0Világ', 8) => %d n', strncmp ( 'Helló 0 0 0','Helló 0Világ',8 ));
18. printf ('strncmp ('Helló Világ','Helló Világ', 5) => %d n', strncmp ( 'Helló Világ','Helló Világ',5 ));
19.
húsz. printf (' n--------------- n');
huszonegy.
22. printf ('strcasecmp ('Helló Világ','Helló Világ') => %d n',strcasecmp( 'Helló Világ','Helló Világ' ));
2. 3. printf ('strcasecmp ('Helló','Helló\0Világ') => %d n',strcasecmp( 'Helló','Helló 0Világ' ));
24. printf ('strcasecmp ('Helló Világ','Helló Világ') => %d n',strcasecmp( 'Helló Világ','Helló Világ' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Helló Világ','Helló Világ', 5) => %d n',strncasecmp( 'Helló Világ','Helló Világ',5 ) );
29. printf ('strncasecmp ('Helló','Helló\0Világ', 5) => %d n',strncasecmp( 'Helló','Helló 0Világ',5 ));
30. printf ('strncasecmp ('Helló\0\0\0','Helló\0Világ', 8) => %d n',strncasecmp( 'Helló 0 0 0','Helló 0Világ',8 ));
31. printf ('strncasecmp ('Helló Világ','Helló Világ', 5) => %d n',strncasecmp( 'Helló Világ','Helló Világ',5 ));
32.
33. printf (' n--------------- n');
3. 4.
35. printf ('memcmp ('Helló Világ','Helló Világ', 5) => %d n', memcmp ( 'Helló Világ','Helló Világ',5 ) );
36. printf ('memcmp ('Helló\0\0\0','Helló\0Világ', 8) => %d n', memcmp ( 'Helló 0 0 0','Helló 0Világ',8 ));
37. printf ('memcmp ('Helló Világ','Helló Világ', 11) => %d n', memcmp ( 'Helló Világ','Helló Világ',tizenegy ));
38.
39.Visszatérés 0; 40.}

Következtetés:

Tehát ebben az oktatóanyagban láttuk, hogyan lehet a karakterláncokat különböző módon összehasonlítani. Amint láttuk, a stringCompare () függvény -1 -et ad vissza az egyenlőtlen karakterláncok esetén, de ez módosítható úgy, hogy a nem egyező karakter ASCII értékét adja vissza. Használhatja a kódjában, amely a legmegfelelőbb az Ön számára.