C Програмування

Програмування порівняння рядків C

Програмування порівняння рядків C
Рядок мовою C - це масив символів, який закінчується нульовим символом (\ 0). За допомогою цієї властивості порівнюються рядки.

Два рядки можна порівнювати різними способами. У цьому посібнику спочатку ми побачимо визначену користувачем функцію для порівняння двох рядків, а потім побачимо деякі вбудовані функції бібліотеки, які можна використовувати для порівняння двох рядків дуже легко. Отже, давайте почнемо.

Порівняння рядків за допомогою визначеної користувачем функції:

Ми напишемо функцію stringCompare () для порівняння рядків. Ми обходимо рядки і порівнюємо кожен символ рядка, поки не дійдемо до кінця будь-якого одного або обох або одного невідповідного знайдено. Якщо обхід досягнутий до кінця обох рядків, то рядки збігаються; в іншому випадку рядки не відповідають.

01. / * userDefinedFunction.c * /
02.
03. #включати
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. в той час як (str1 [i] == str2 [i])
10.
11. якщо (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. перерва;
13. i ++;
14.
15.
16. якщо (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. повернути 0;
18. ще
19. повернення -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Введіть перший рядок:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Ввести другий рядок:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (stringCompare (str1, str2) == 0)
34. printf ("Рядки рівні \ n");
35. ще
36. printf ("Рядки не рівні \ n");
37.
38. повернути 0; 39.

Тут ми обходимо рядки за допомогою циклу while та змінної i. Коли символи рівні в одному положенні обох рядків, значення i збільшується на 1 (рядок 13). Якщо символи не рівні (рядок 09) або ми дійшли до кінця рядка (рядок 11), тоді цикл while є розривом. Після циклу while ми перевіряємо, чи обидва рядки досягнуті до кінця чи ні (рядок 16). Якщо обхід досягнутий до кінця обох рядків, то рядки рівні, інакше ні.

Порівняння рядків за допомогою вбудованих функцій бібліотеки:

Наступні функції бібліотеки можна використовувати для порівняння рядків. Усі функції оголошені в рядок.h файл заголовка.

Функція strcmp ():

Ця функція порівнює два рядки, передані функції.

Синтаксис:

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

Повернене значення: Поверніть 0, якщо рядки рівні. Повернути від’ємне ціле число, якщо значення ASCII першого нерівного символу першого рядка менше, ніж другого рядка. Повертає додатне ціле число, якщо значення ASCII першого нерівного символу першого рядка більше, ніж другого рядка. Деякі системи повертають різницю в значенні ASCII першого невідповідного символу, а деякі системи повертають -1, якщо значення ASCII першого нерівного символу першого рядка менше, ніж другого рядка, і повертає 1, якщо значення ASCII першого нерівного символу перший рядок більше, ніж другий рядок.

Приклад Повернене значення Пояснення
strcmp ( “Привіт Світ”, “Привіт Світ” ) 0 Дві струни однакові.
strcmp ( “Привіт”, “Привіт \ 0 Світ” ) 0 Рядки порівнюються до символу '\ 0'. Перший рядок за замовчуванням закінчується на "\ 0", а другий рядок містить символ "\ 0" після "Привіт".
strcmp ( "Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ" ) 0 Рядки порівнюються до символу '\ 0'.
strcmp ( “Привіт Світ”, “привіт Світ” ) Від’ємне ціле число Значення ASCII першого нерівного символу першого рядка ('H') менше, ніж другого рядка ('h')
strcmp (“Привіт Світ”, “Привіт Світ” ) Позитивне ціле число Значення ASCII першого нерівного символу першого рядка ('h') більше, ніж другого рядка ('H')

Функція strncmp ():

Ця функція подібна до функції strcmp (), але тут ми повинні вказати, скільки байтів порівнюється, передаючи додатковий аргумент функції.

Синтаксис:

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

Повернене значення: Функція повертається 0 якщо перший п символи двох рядків рівні; в іншому випадку він повертає від’ємне або додатне ціле число залежно від знаку різниці між значенням ASCII першого невідповідного символу.

Приклад Повернене значення Пояснення
strncmp ( “Привіт Світ”, “Привіт Світ”, 5 ) 0 Перші 5 символів однакові.
strncmp ( “Привіт”, “Привіт \ 0 Світ”, 5 ) 0 Перші 5 символів однакові.
strncmp ( "Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ", 8 ) 0 '\ 0' - після перших 5 символів в обох рядках. Отже, порівняння зупиняється через 5, а не 8.
strncmp ( “Привіт Світ”, “привіт Світ”, 5 ) Від’ємне ціле число Значення ASCII першого нерівного символу першого рядка ('H') менше, ніж другого рядка ('h')

Функція strcasecmp ():

Ця функція подібна до функції strcmp (), але тут рядки не чутливі до регістру.

Синтаксис:

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

Повернене значення: Такий же, як strcmp (), але рядки трактуються як з урахуванням регістру.

Приклад Повернене значення Пояснення
strcasecmp ( “Привіт Світ”, “Привіт Світ” ) 0 Дві струни однакові.
strcasecmp ( “Привіт”, “Привіт \ 0 Світ” ) 0 Рядки порівнюються до символу '\ 0'. Перший рядок за замовчуванням закінчується на "\ 0", а другий рядок містить символ "\ 0" після "Привіт".
strcasecmp ( “Привіт Світ”, “привіт Світ” ) 0 Струни є з урахуванням регістру. Отже, “Hello World” і “hello World” - це одне і те ж.

Функція strncasecmp ():

Ця функція подібна до функції strncmp (), але тут рядки не чутливі до регістру.

Синтаксис:

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

Повернене значення: Такий же, як strncmp (), коли рядки розглядаються як чутливі до регістру.

Приклад Повернене значення Пояснення
strncasecmp ( “Привіт Світ”, “Привіт Світ”, 5 ) 0 Перші 5 символів однакові.
strncasecmp ( “Привіт”, “Привіт \ 0 Світ”, 5 ) 0 Перші 5 символів однакові.
strncasecmp ( "Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ", 8 ) 0 '\ 0' - після перших 5 символів в обох рядках. Отже, порівняння зупиняється через 5, а не 8.
strncasecmp ( “Привіт Світ”, “привіт Світ”, 5 ) 0 Струни є з урахуванням регістру. Отже, «Привіт» і «привіт» - це одне і те ж.

функція memcmp ():

Ця функція порівнює два блоки пам'яті байт за байтом. Потрібно передати два покажчики блоків пам'яті та кількість байт для порівняння.

Синтаксис:

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

Повернене значення: Функція повертає 0, якщо два блоки пам'яті (п байтів) рівні; в іншому випадку він повертає відмінності між першою невідповідною парою байтів (байти інтерпретуються як беззнакові об'єкти char, потім підвищуються до int).

Приклад Повернене значення Пояснення
memcmp ( “Привіт Світ”, “Привіт Світ”, 5 ) 0 Перші 5 символів однакові.
memcmp ( "Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ", 8 ) Від’ємне ціле число Перші 6 символів однакові, а 7-й символ - інші. Тут порівняння не зупинилося на зразок strncmp () при отриманні символу \ \ 0.
memcmp ( “Привіт Світ”, “привіт Світ”, 11 ) Від’ємне ціле число Значення ASCII першого нерівного символу першого рядка ('H') менше, ніж другого рядка ('h')

Приклад:

Далі наведено приклад коду С усіх обговорюваних функцій.

01. / * stringCompare.c * /
02.
03. #включати
04. #включати
05.
06. int main ()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" Привіт "," Привіт \\ 0 Світ ") =>% d \ n", strcmp ("Привіт", "Привіт \ 0 Світ"));
10. printf ("strcmp (" Hello World "," hello World ") =>% d \ n", strcmp ("Hello World", "hello World"));
11. printf ("strcmp (" Привіт \\ 0 \\ 0 \\ 0 "," Привіт \\ 0 Світ ") =>% d \ n", strcmp ("Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ "));
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 (" Привіт "," Привіт \\ 0 Світ ", 5) =>% d \ n", strncmp ("Привіт", "Привіт \ 0 Світ", 5));
17. printf ("strncmp (" Привіт \\ 0 \\ 0 \\ 0 "," Привіт \\ 0 Світ ", 8) =>% d \ n", strncmp ("Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ ", 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 (" Привіт "," Привіт \\ 0 Світ ") =>% d \ n", strcasecmp ("Привіт", "Привіт \ 0 Світ"));
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 (" Привіт "," Привіт \\ 0 Світ ", 5) =>% d \ n", strncasecmp ("Привіт", "Привіт \ 0 Світ", 5));
30. printf ("strncasecmp (" Привіт \\ 0 \\ 0 \\ 0 "," Привіт \\ 0 Світ ", 8) =>% d \ n", strncasecmp ("Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ ", 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 (" Привіт \\ 0 \\ 0 \\ 0 "," Привіт \\ 0 Світ ", 8) =>% d \ n", memcmp ("Привіт \ 0 \ 0 \ 0", "Привіт \ 0 Світ ", 8));
37. printf ("memcmp (" Hello World "," hello World ", 11) =>% d \ n", memcmp ("Hello World", "hello World", 11));
38.
39. повернути 0; 40.

Висновок:

Отже, у цьому підручнику ми побачили, як рядки можна порівнювати різними способами. Як ми бачили, функція stringCompare () повертає -1 для нерівних рядків, але її можна змінити так, щоб вона повертала значення ASCII невідповідного символу. Ви можете використовувати його у своєму коді, який вам найбільше підходить.

Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...
WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...