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.