C Програмиране

Програмиране на Сравнение на низове C

Програмиране на Сравнение на низове C
Низът на език C е масив от символи, който се прекратява с нулев знак (\ 0). С помощта на това свойство се сравняват низовете.

Две низове могат да се сравняват по различни начини. В този урок първо ще видим дефинирана от потребителя функция за сравняване на два низа, а след това ще видим някои вградени библиотечни функции, които могат да се използват за сравнение на два низа много лесно. И така, нека започнем.

Сравнение на низове с помощта на дефинирана от потребителя функция:

Ще напишем функция stringCompare () за сравнение на низове. Преминаваме през низовете и сравняваме всеки знак от низа, докато стигнем до края на който и да е или и двата, или един несъответстващ се намери. Ако обхождането е достигнато до края на двата струни, тогава струните са съвпадащи; в противен случай низовете са несъответстващи.

01. / * userDefinedFunction.° С*/
02.
03. #include
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). Ако обхождането е достигнато до края на двата низа, тогава струните са равни, иначе не.

Сравнение на низове с помощта на вградени библиотечни функции:

Следните библиотечни функции могат да се използват за сравнение на низове. Всички функции са декларирани в низ.з заглавен файл.

функция 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 ( “Hello World”, “Hello World”, 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 ( “Hello World”, “Hello World”, 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 ( “Hello World”, “Hello World”, 5 ) 0 Първите 5 знака са еднакви.
memcmp ( „Здравей \ 0 \ 0 \ 0", „Здравей \ 0 Свят", 8 ) Отрицателно цяло число Първите 6 знака са еднакви, но 7-ият знак е различен. Тук сравнението не спря като strncmp () при получаване на символ \ \ 0.
memcmp ( „Здравей, свят“, „здравей, свят“, 11 ) Отрицателно цяло число Стойността на ASCII на първия несравним символ на първия низ ('H') е по-малка от втория низ ('h')

Пример:

Следва пример за кода на С на всички обсъждани функции.

01. / * stringCompare.° С*/
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 (" Здравей \\ 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 (" Hello "," Hello \\ 0 World ", 5) =>% d \ n", strncmp ("Hello", "Hello \ 0 World", 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 (" 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 (" Здравей \\ 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 стойност на несъответстващ символ. Можете да го използвате във вашия код, който е най-подходящ за вас.

Контролирайте и управлявайте движението на мишката между множество монитори в Windows 10
Двоен дисплей на мишката ви позволява да контролирате и конфигурирате движението на мишката между множество монитори, като забавя движенията му близо ...
WinMouse ви позволява да персонализирате и подобрите движението на показалеца на мишката на компютър с Windows
Ако искате да подобрите функциите по подразбиране на показалеца на мишката, използвайте безплатна програма WinMouse. Той добавя още функции, за да ви ...
Бутонът на левия бутон на мишката не работи в Windows 10
Ако използвате специална мишка с вашия лаптоп или настолен компютър, но бутонът на левия бутон на мишката не работи на Windows 10/8/7 по някаква причи...