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

String Comparison C Programming



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







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



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

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



01./*userDefinedFunction.c*/
02.
03.#включва
04.
05.intstringCompare( charstr1[ ], charstr2[ ] )
06.{
07.inti=0;
08.
09. докато(str1[i] ==str2[i] )
10.
петнадесет.
16.ако(str1[i] == ' 0' &&str2[i] == ' 0' )
17.връщане 0;
18.иначе
19.връщане -1;
двайсет.
двадесет и едно.}
22.
2. 3.
24.intглавен()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Въведете първия низ:');
29. scanf ('% [^н]% * ° С ',str1);
30. printf ('Въведете втория низ:');
31. scanf ('% [^н]% * ° С ',str2);
32.
33.ако(stringCompare(str1,str2) == 0)
3. 4. printf („Низовете са равнин');
35.иначе
36. printf („Низовете не са равнин');
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н)

Възвращаема стойност: Функцията се връща 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 () , но тук низовете не са чувствителни към регистъра.

Синтаксис:

intstrcasecmp(const char *str1, const char *str2)

Възвращаема стойност: Същото като strcmp () , но низовете се третират като чувствителни към регистъра .

Пример Възвращаема стойност Обяснение
strcasecmp ( Здравей свят, здравей свят ) 0 Две струни са еднакви.
strcasecmp ( Здравейте, Здравей 0 Свят ) 0 Низовете се сравняват до знака „ 0“. Първият низ по подразбиране завършва с „ 0“, а вторият низ съдържа знака „ 0“ след „Здравей“.
strcasecmp ( Здравей свят, здравей свят ) 0 Струните са чувствителни към регистъра И така, Hello World и hello World са еднакви.

функция strncasecmp ():

Тази функция е подобна на функцията strncmp () , но тук низовете не са чувствителни към регистъра.

Синтаксис:

intstrncasecmp(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 невалиден *str1, const невалиден *str2, size_tн)

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

Пример Възвращаема стойност Обяснение
memcmp ( Здравей свят, здравей свят, 5 ) 0 Първите 5 знака са еднакви.
memcmp ( Здравейте 0 0 0 ″, Здравейте 0 Свят, 8 ) Отрицателно цяло число Първите 6 знака са еднакви, но 7 -мият знак е различен. Тук сравнението не спря като strncmp () при получаване на знак „ 0“.
memcmp ( Здравей свят, здравей свят, 11 ) Отрицателно цяло число ASCII стойността на първия несравнен знак на първия низ („H“) е по -малка от втория низ („h“)

Пример:

По -долу е даден пример за C код на всички дискутирани функции.

01./*stringCompare.c*/
02.
03.#включва
04.#включва
05.
06.intглавен()
07.{
08. printf ('strcmp ('Здравей свят','Здравей свят') => %dн', strcmp ( 'Здравей свят','Здравей свят' ));
09. printf ('strcmp ('Здравейте','Здравейте\0Светът') => %dн', strcmp ( 'Здравейте','Здравейте 0Светът ' ));
10. printf ('strcmp ('Здравей свят','Здравей свят') => %dн', strcmp ( 'Здравей свят','Здравей свят' ) );
единадесет. printf ('strcmp ('Здравейте\0\0\0','Здравейте\0Светът') => %dн', strcmp ( 'Здравейте 0 0 0','Здравейте 0Светът ' ));
12.
13. printf ('н---------------н');
14.
петнадесет. printf ('strncmp ('Здравей свят','Здравей свят', 5) => %dн', strncmp ( 'Здравей свят','Здравей свят',5 ));
16. printf ('strncmp ('Здравейте','Здравейте\0Светът', 5) => %dн', strncmp ( 'Здравейте','Здравейте 0Светът ',5 ));
17. printf ('strncmp ('Здравейте\0\0\0','Здравейте\0Светът', 8) => %dн', strncmp ( 'Здравейте 0 0 0','Здравейте 0Светът ',8 ));
18. printf ('strncmp ('Здравей свят','Здравей свят', 5) => %dн', strncmp ( 'Здравей свят','Здравей свят',5 ));
19.
двайсет. printf ('н---------------н');
двадесет и едно.
22. printf ('strcasecmp ('Здравей свят','Здравей свят') => %dн',strcasecmp( 'Здравей свят','Здравей свят' ));
2. 3. printf ('strcasecmp ('Здравейте','Здравейте\0Светът') => %dн',strcasecmp( 'Здравейте','Здравейте 0Светът ' ));
24. printf ('strcasecmp ('Здравей свят','Здравей свят') => %dн',strcasecmp( 'Здравей свят','Здравей свят' ));
25.
26. printf ('н---------------н');
27.
28. printf ('strncasecmp ('Здравей свят','Здравей свят', 5) => %dн',strncasecmp( 'Здравей свят','Здравей свят',5 ) );
29. printf ('strncasecmp ('Здравейте','Здравейте\0Светът', 5) => %dн',strncasecmp( 'Здравейте','Здравейте 0Светът ',5 ));
30. printf ('strncasecmp ('Здравейте\0\0\0','Здравейте\0Светът', 8) => %dн',strncasecmp( 'Здравейте 0 0 0','Здравейте 0Светът ',8 ));
31. printf ('strncasecmp ('Здравей свят','Здравей свят', 5) => %dн',strncasecmp( 'Здравей свят','Здравей свят',5 ));
32.
33. printf ('н---------------н');
3. 4.
35. printf ('memcmp ('Здравей свят','Здравей свят', 5) => %dн', memcmp ( 'Здравей свят','Здравей свят',5 ) );
36. printf ('memcmp ('Здравейте\0\0\0','Здравейте\0Светът', 8) => %dн', memcmp ( 'Здравейте 0 0 0','Здравейте 0Светът ',8 ));
37. printf ('memcmp ('Здравей свят','Здравей свят', 11) => %dн', memcmp ( 'Здравей свят','Здравей свят',единадесет ));
38.
39.връщане 0; 40.}

Заключение:

Така че в този урок видяхме как низовете могат да се сравняват по различни начини. Както видяхме, функцията stringCompare () връща -1 за неравни низове, но това може да бъде променено, така че да връща ASCII стойност на несъответстващ символ. Можете да го използвате във вашия код, който е най -подходящ за вас.