C programozás

Karakterlánc összehasonlítás C programozás

Karakterlánc összehasonlítás C programozás
A C nyelvű karakterlánc egy tömb karakter, amely null karakterrel végződik (\ 0). Ennek a tulajdonságnak a felhasználásával a karakterláncokat összehasonlítjuk.

Két húr különböző módon hasonlítható össze. Ebben az oktatóanyagban először egy felhasználó által definiált függvényt fogunk látni két karaktersorozat összehasonlításához, majd néhány beépített könyvtárfüggvényt fogunk látni, amelyek segítségével két karaktersorozatot nagyon egyszerűen összehasonlíthat. Tehát kezdjük.

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

Írunk egy függvényt stringCompare () húrok összehasonlítására. Végigjárjuk a húrokat, és összehasonlítjuk a karakterlánc egyes karaktereit, amíg el nem érjük az egyik végét, vagy mindkettőt megtaláljuk, vagy egy nem megfelelő. Ha az áthaladást mindkét húr végéig elérjük, akkor a húrok egyeztetésre kerülnek; különben a húrok nem egyeznek.

01. / * userDefinedFunction.c * /
02.
03. #include
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. míg (str1 [i] == str2 [i])
10.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. szünet;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. visszatér 0;
18. más
19. visszatérés -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [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. if (stringCompare (str1, str2) == 0)
34. printf ("A karakterláncok egyenlőek \ n");
35. más
36. printf ("A karakterláncok nem egyenlőek \ n");
37.
38. visszatér 0; 39.

Itt a while ciklust és egy változót használva haladunk át a húrokon én. Ha a karakterek mindkét karakterlánc azonos helyzetében megegyeznek, akkor a én 1-gyel növekszik (13. sor). Ha a karakterek nem egyenlőek (09. sor), vagy elérjük a karakterlánc végét (11. sor), akkor a while hurok törés. A while ciklus után ellenőrizzük, hogy a húrok áthaladása a végére ért-e vagy sem (16. sor). Ha az áthaladást mindkét húr végéig elérjük, akkor a húrok egyenlőek, különben nem.

Karakterlánc-összehasonlítás beépített könyvtári függvényekkel:

A következő könyvtárfüggvények használhatók a karakterlánc-összehasonlításhoz. Az összes függvényt a húr.h fejlécfájl.

strcmp () függvény:

Ez a függvény összehasonlítja a függvényhez átadott két karakterláncot.

Szintaxis:

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

Visszatérési érték: Ha 0 karakterlánc egyenlő, adja vissza a 0 értéket. Ha negatív egész számot ad vissza, ha az első karakterlánc első páratlan karakterének ASCII-értéke kisebb, mint a második karakterlánc. Adjon vissza pozitív egész számot, ha az első karakterlánc első páratlan karakterének ASCII-értéke nagyobb, mint a második karakterlánc. Egyes rendszerek visszaadják az első nem egyező karakter ASCII értékének különbségét, és egyes rendszerek -1 értéket adnak vissza, ha az első karakterlánc első páratlan karakterének ASCII értéke kisebb, mint a második karakterlánc, és 1-et ad vissza, ha az első páratlan karakter ASCII értéke az első karakterlánc nagyobb, mint a második karakterlánc.

Példa Visszatérési érték Magyarázat
strcmp ( „Hello World”, „Hello World” ) 0 Két húr azonos.
strcmp ( „Hello”, „Hello \ 0 World” ) 0 A karakterláncokat összehasonlítjuk a '\ 0' karakterig. Az első karakterlánc alapértelmezés szerint '\ 0' -val végződik, a második karakterlánc pedig a 'Hello' után a '\ 0' karaktert tartalmazza.
strcmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 World" ) 0 A karakterláncokat összehasonlítjuk a '\ 0' karakterig.
strcmp ( „Hello World”, „Hello World” ) Negatív egész szám Az első karakterlánc első páratlan karakterének ASCII-értéke ('H') 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 ASCII-értéke ('h') nagyobb, mint a második karakterlánc ('H')

strncmp () függvény:

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

Szintaxis:

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

Visszatérési érték: A függvény visszatér 0 ha az első n a két karakter 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 Visszatérési érték Magyarázat
strncmp ( „Hello World”, „Hello World”, 5. oldal ) 0 Az első 5 karakter megegyezik.
strncmp ( „Hello”, „Hello \ 0 World”, 5. oldal ) 0 Az első 5 karakter megegyezik.
strncmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8. oldal ) 0 A '\ 0' mindkét karakterlánc első 5 karaktere után áll. Tehát az összehasonlítás 5, nem 8 után leáll.
strncmp ( „Hello World”, „hello World”, 5. oldal ) Negatív egész szám Az első karakterlánc első páratlan karakterének ASCII-értéke ('H') 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 a kis- és nagybetűket.

Szintaxis:

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

Visszatérési érték: Ugyanaz, mint a strcmp (), de a húrokat úgy kezelik eset-érzékeny.

Példa Visszatérési érték Magyarázat
strcasecmp ( „Hello World”, „Hello World” ) 0 Két húr azonos.
strcasecmp ( „Hello”, „Hello \ 0 World” ) 0 A karakterláncokat összehasonlítjuk a '\ 0' karakterig. Az első karakterlánc alapértelmezés szerint "\ 0" -val végződik, a második karakterlánc pedig a "Hello" után a "\ 0" karaktert tartalmazza.
strcasecmp ( „Hello World”, „Hello World” ) 0 A húrok vannak eset-érzékeny. 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 a kis- és nagybetűket.

Szintaxis:

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

Visszatérési érték: Ugyanaz, mint a strncmp (), amikor a húrokat kis- és nagybetűkkel kezeljük.

Példa Visszatérési érték Magyarázat
strncasecmp ( „Hello World”, „Hello World”, 5. oldal ) 0 Az első 5 karakter megegyezik.
strncasecmp ( „Hello”, „Hello \ 0 World”, 5. oldal ) 0 Az első 5 karakter megegyezik.
strncasecmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8. oldal ) 0 A '\ 0' mindkét karakterlánc első 5 karaktere után áll. Tehát az összehasonlítás 5, nem 8 után leáll.
strncasecmp ( „Hello World”, „hello World”, 5. oldal ) 0 A húrok eset-érzékeny. Tehát a „Hello” és a „hello” ugyanaz.

memcmp () függvény:

Ez a függvény két memória blokkot bájtonként hasonlít össze. Át kell adnunk a memóriablokkok két mutatóját és az összehasonlítandó bájtok számát.

Szintaxis:

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

Visszatéré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 egyező bájpár közötti különbségeket (a bájtokat aláíratlan char objektumként értelmezzük, majd int elé emeljük).

Példa Visszatérési érték Magyarázat
memcmp ( “Hello World”, “Hello World”, 5. oldal ) 0 Az első 5 karakter megegyezik.
memcmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8. oldal ) Negatív egész szám Az első 6 karakter ugyanaz, de a 7. karakter más. Itt az összehasonlítás nem állt le, mint strncmp () amikor '\ 0' karaktert kap.
memcmp ( „Hello World”, „hello World”, 11. oldal ) Negatív egész szám Az első karakterlánc első páratlan karakterének ASCII-értéke ('H') kisebb, mint a második karakterlánc ('h')

Példa:

Az alábbiakban bemutatjuk az összes megvitatott funkció C-kódját.

01. / * stringCompare.c * /
02.
03. #include
04. #include
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World");
09. printf ("strcmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello", "Hello \ 0 World"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ") =>% d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0" Világ "));
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 (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncmp ("Hello", "Hello \ 0 World", 5));
17. printf ("strncmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello Hello 0 World ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello" \ 0 Világ ", 8));
18. printf ("strncmp (" Hello World "," hello World ", 5) =>% d \ n", strncmp ("Hello World", "hello World", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hello World "," Hello World ") =>% d \ n", strcasecmp ("Hello World", "Hello World");
23. printf ("strcasecmp (" Hello "," Hello \\ 0 World ") =>% d \ n", strcasecmp ("Hello", "Hello \ 0 World");
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 Világ ", 8));
31. printf ("strncasecmp (" Hello World "," hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "hello World", 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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", memcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Világ ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. visszatér 0; 40.

Következtetés:

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

Hogyan lehet játékot fejleszteni Linuxon
Egy évtizeddel ezelőtt nem sok Linux-felhasználó jósolta, hogy kedvenc operációs rendszerük egy napon a videojátékok népszerű játékplatformja lesz. El...
Kereskedelmi játékmotorok nyílt forráskódú portjai
Ingyenes, nyílt forráskódú és platformokon átívelő játékmotorok szabadidős programjai felhasználhatók a régi, valamint a meglehetősen friss játékcímek...
A legjobb parancssori játékok Linuxhoz
A parancssor nem csak a legnagyobb szövetséges a Linux használatakor, hanem a szórakozás forrása is lehet, mert sok olyan szórakoztató játék lejátszás...