Porównanie ciągów C Programowanie

Porównanie ciągów C Programowanie
Ciąg w języku C to szereg znaków, który jest zakończony zerowym znakiem (\ 0). Korzystanie z tego ciąży nieruchomości są porównywane.

Dwa struny można porównać na różne sposoby. W tym samouczku najpierw zobaczymy funkcję zdefiniowaną przez użytkownika do porównania dwóch ciągów, a następnie zobaczymy niektóre wbudowane funkcje biblioteczne, których można użyć do bardzo łatwego porównania dwóch ciągów. Więc zacznijmy.

Porównanie ciągów za pomocą funkcji zdefiniowanej przez użytkownika:

Napiszemy funkcję StringCompre () Aby porównać struny. Przemierzamy sznurki i porównujemy każdy znak struny, dopóki nie osiągniemy końca jednego lub obu lub jednego niedopasowanego. Jeśli przejście zostanie osiągnięte do końca obu strun, wówczas sznurki są dopasowane; W przeciwnym razie sznurki są niedopasowane.

01. /*UserDefinedFunkction.C*/
02.
03. #włączać
04.
05. int StringCompary (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. podczas gdy (str1 [i] == str2 [i])
10.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. przerwa;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. powrót 0;
18. w przeciwnym razie
19. zwrot -1;
20.
21.
22.
23.
24. int main ()
25.
26. Char Str1 [30], STR2 [30];
27.
28. printf („Wprowadź pierwszy ciąg:”);
29. Scanf („%[^\ n]%*c”, str1);
30. printf („Wprowadź drugi ciąg:”);
31. Scanf („%[^\ n]%*c”, str2);
32.
33. if (StringCompary (str1, str2) == 0)
34. printf („ciągi są równe \ n”);
35. w przeciwnym razie
36. printf („ciągi nie są równe \ n”);
37.
38. powrót 0; 39.

Tutaj przemierzamy ciągi za pomocą pętli i zmiennej I. Gdy znaki są równe w tej samej pozycji obu ciągów, wartość I jest zwiększany o 1 (wiersz 13). Jeśli znaki nie są równe (wiersz 09) lub docieramy do końca ciągu (wiersz 11), wówczas pętla While to przerwa. Po pętli While sprawdzamy, że oba przejście strunowe są osiągane do końca lub nie (wiersz 16). Jeśli przemieszczenie zostanie osiągnięte do końca obu strun, to struny są równe inaczej.

Porównanie ciągów za pomocą wbudowanych funkcji biblioteki:

Do porównania ciągów można użyć następujących funkcji biblioteki. Wszystkie funkcje są zadeklarowane w strunowy.H plik nagłówka.

funkcja strcmp ():

Ta funkcja porównuje dwa ciągi przekazane do funkcji.

Składnia:

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

Wartość zwracana: Zwrócić 0, jeśli ciągi są równe. Zwróć negatywną liczbę całkowitą, jeśli wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu jest mniejsza niż drugi ciąg. Zwróć dodatnią liczbę całkowitą, jeśli wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu jest większa niż drugi ciąg. Niektóre systemy zwracają różnicę wartości ASCII pierwszego niedopasowanego znaku, a niektóre systemy zwracają -1, jeśli wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu jest mniejsza niż drugi ciąg i zwraca 1, jeśli wartość ASCII pierwszego niezrównanego znaku Pierwszy ciąg jest większy niż drugi ciąg.

Przykład Wartość zwracana Wyjaśnienie
strcmp ( „Hello World”, „Hello World” ) 0 Dwa sznurki są takie same.
strcmp ( „Hello”, „Hello \ 0 World” ) 0 Struny są porównywane do postaci „\ 0”. Pierwszy ciąg domyślnie kończy się „\ 0”, a drugi ciąg zawiera znak „\ 0” po „Hello”.
strcmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World” ) 0 Struny są porównywane do postaci „\ 0”.
strcmp ( „Hello World”, „Hello World” ) Negatywna liczba całkowita Wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu („H”) jest mniejsza niż drugi ciąg („H”)
strcmp („Hello World”, „Hello World” ) Dodatnia liczba całkowita ASCII Wartość pierwszego niezrównanego znaku pierwszego ciągu („H”) jest większa niż drugi ciąg („H”)

funkcja strncmp ():

Ta funkcja jest podobna do funkcji strcmp (), Ale tutaj musimy określić, ile bajtów jest porównywanych, przekazując dodatkowy argument do funkcji.

Składnia:

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

Wartość zwracana: Funkcja powraca 0 Jeśli pierwszy N Znaki dwóch strun są równe; W przeciwnym razie zwraca negatywną lub dodatnią liczbę całkowitą w zależności od znaku różnic między wartością ASCII pierwszej niedopasowanej postaci.

Przykład Wartość zwracana Wyjaśnienie
strncmp ( „Hello World”, „Hello World”, 5 ) 0 Pierwsze 5 znaków jest takich samych.
strncmp ( „Hello”, „Hello \ 0 World”, 5 ) 0 Pierwsze 5 znaków jest takich samych.
strncmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8 ) 0 „\ 0” jest po pierwszych 5 znakach w obu strunach. Więc porównanie jest zatrzymywane po 5, a nie 8.
strncmp ( „Hello World”, „Hello World”, 5 ) Negatywna liczba całkowita Wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu („H”) jest mniejsza niż drugi ciąg („H”)

funkcja strcasecmp ():

Ta funkcja jest podobna do funkcji strcmp (), Ale tutaj struny nie są wrażliwe.

Składnia:

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

Wartość zwracana: Taki sam jak strcmp (), Ale struny są traktowane jako wrażliwy na przypadek.

Przykład Wartość zwracana Wyjaśnienie
strcasecmp ( „Hello World”, „Hello World” ) 0 Dwa sznurki są takie same.
strcasecmp ( „Hello”, „Hello \ 0 World” ) 0 Struny są porównywane do postaci „\ 0”. Pierwszy ciąg domyślnie kończy się „\ 0”, a drugi ciąg zawiera znak „\ 0” po „Hello”.
strcasecmp ( „Hello World”, „Hello World” ) 0 Struny są wrażliwy na przypadek. Tak więc „Hello World” i „Hello World” są takie same.

funkcja strncasecmp ():

Ta funkcja jest podobna do funkcji strncmp (), Ale tutaj struny nie są wrażliwe.

Składnia:

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

Wartość zwracana: Taki sam jak strncmp (), Gdy struny są traktowane jako wrażliwe na przypadek.

Przykład Wartość zwracana Wyjaśnienie
strncasecmp ( „Hello World”, „Hello World”, 5 ) 0 Pierwsze 5 znaków jest takich samych.
strncasecmp ( „Hello”, „Hello \ 0 World”, 5 ) 0 Pierwsze 5 znaków jest takich samych.
strncasecmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8 ) 0 „\ 0” jest po pierwszych 5 znakach w obu strunach. Więc porównanie jest zatrzymywane po 5, a nie 8.
strncasecmp ( „Hello World”, „Hello World”, 5 ) 0 Struny są wrażliwy na przypadek. Tak więc „Hello” i „Hello” są takie same.

Funkcja memcmp ():

Ta funkcja porównuje dwa bloki pamięci bajtu przez bajt. Musimy przekazać dwa wskaźniki bloków pamięci i liczbę bajtów do porównania.

Składnia:

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

Wartość zwracana: Funkcja zwraca 0, jeśli dwa bloki pamięci (N bajty) są równe; W przeciwnym razie zwraca różnice między pierwszą niedopasowaną parą bajtów (bajty są interpretowane jako niepodpisane obiekty char, a następnie promowane do int).

Przykład Wartość zwracana Wyjaśnienie
memcmp ( „Hello World”, „Hello World”, 5 ) 0 Pierwsze 5 znaków jest takich samych.
memcmp ( „Hello \ 0 \ 0 \ 0”, „Hello \ 0 World”, 8 ) Negatywna liczba całkowita Pierwsze 6 znaków jest takie same, ale 7. postać jest inna. Tutaj porównanie nie powstrzymało się jak strncmp () Kiedy otrzymuje znak „\ 0”.
memcmp ( „Hello World”, „Hello World”, 11 ) Negatywna liczba całkowita Wartość ASCII pierwszego niezrównanego znaku pierwszego ciągu („H”) jest mniejsza niż drugi ciąg („H”)

Przykład:

Poniżej znajduje się przykład kodu C wszystkich omawianych funkcji.

01. /*StringCompary.C*/
02.
03. #włączać
04. #włączać
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 świat ”) => %d \ n”, strcmp („hello”, „hello \ 0 świat”));
10. printf („strcmp („ Hello World ”,„ Hello World ”) => %d \ n”, strcmp („Hello World”, „Hello World”));
11. printf ("strcmp (" hello \\ 0 \\ 0 \\ 0 "," hello \\ 0 świat ") => %d \ n", strcmp ("hello \ 0 \ 0 \ 0", "hello \ 0 Świat" ));
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 świat ”, 5) => %d \ n”, strncmp („hello”, „hello \ 0 świat”, 5));
17. printf ("strncmp (" hello \\ 0 \\ 0 \\ 0 "," hello \\ 0 świat ", 8) => %d \ n", strncmp ("hello \ 0 \ 0 \ 0", "hello \ 0 World ", 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 świat ”) => %d \ n”, strcasecmp („hello”, „hello \ 0 świat”));
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 świat ”, 5) => %d \ n”, strncasecmp („hello”, „hello \ 0 świat”, 5));
30. printf ("strncasecmp (" hello \\ 0 \\ 0 \\ 0 "," hello \\ 0 świat ", 8) => %d \ n", strncasecmp ("hello \ 0 \ 0 \ 0", "hello \ 0 World ", 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 świat ", 8) => %d \ n", memcmp ("hello \ 0 \ 0 \ 0", "Hello \ 0 World ", 8));
37. printf („memcmp („ Hello World ”,„ Hello World ”, 11) => %d \ n”, memcmp („Hello World”, „Hello World”, 11));
38.
39. powrót 0; 40.

Wniosek:

Tak więc w tym samouczku widzieliśmy, jak można porównać struny na różne sposoby. Jak widzieliśmy, funkcja StringCompre () zwraca -1 dla nierównych ciągów, ale można to zmodyfikować, aby zwraca wartość ASCII niedopasowanego znaku. Możesz użyć go w swoim kodzie, który najlepiej dla Ciebie.