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

Сравнение строк C-программирование

Сравнение строк C-программирование
Строка на языке C - это массив символов, который заканчивается нулевым символом (\ 0). С помощью этого свойства сравниваются строки.

Две строки можно сравнивать по-разному. В этом руководстве сначала мы увидим определяемую пользователем функцию для сравнения двух строк, а затем мы увидим некоторые встроенные библиотечные функции, которые можно использовать для очень простого сравнения двух строк. Итак, приступим.

Сравнение строк с использованием пользовательской функции:

Напишем функцию строкаCompare () сравнивать строки. Мы проходим по строкам и сравниваем каждый символ строки, пока не дойдем до конца любого одного или обоих, либо не будет найдено одно несовпадение. Если обход достигается до конца обеих строк, то строки сопоставляются; в противном случае строки не совпадают.

01. / * userDefinedFunction.c * /
02.
03. #включать
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int я = 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. если (stringCompare (str1, str2) == 0)
34. printf ("Строки равны \ n");
35 год. еще
36. printf ("Строки не равны \ n");
37.
38. возврат 0; 39.

Здесь мы проходим строки, используя цикл while и переменную я. Когда символы равны в одной и той же позиции обеих строк, значение я увеличивается на 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' после 'Hello'.
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' после 'Hello'.
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 ( «Hello World», «Hello World», 5 ) 0 Струны без учета регистра. Итак, «Привет» и «Привет» - это одно и то же.

Функция memcmp ():

Эта функция сравнивает два блока памяти побайтно. Нам нужно передать два указателя блоков памяти и количество байтов для сравнения.

Синтаксис:

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

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

Пример Возвращаемое значение Объяснение
memcmp ( «Привет, мир», «Привет, мир», 5 ) 0 Первые 5 символов совпадают.
memcmp ( «Привет \ 0 \ 0 \ 0», «Привет \ 0, мир», 8 ) Отрицательное целое число Первые 6 символов одинаковы, но 7-й символ отличается. Здесь сравнение не прекратилось strncmp () при получении символа '\ 0'.
memcmp ( «Hello World», «Hello World», 11 ) Отрицательное целое число Значение ASCII первого несовпадающего символа первой строки ('H') меньше, чем вторая строка ('h')

Пример:

Ниже приведен пример кода C всех обсуждаемых функций.

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 (" 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 Мир" ));
12.
13. printf ("\ п --------------- \ п");
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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Мир », 8));
18. printf ("strncmp (" Hello World "," Hello World ", 5) =>% d \ n", strncmp ("Hello World", "Hello World", 5));
19.
20. printf ("\ п --------------- \ п");
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 ("\ п --------------- \ п");
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 (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Мир », 8));
31 год. printf ("strncasecmp (" Hello World "," Hello World ", 5) =>% d \ n", strncasecmp ("Hello World", "Hello World", 5));
32.
33. printf ("\ п --------------- \ п");
34.
35 год. printf ("memcmp (« Привет, мир »,« Привет, мир », 5) =>% d \ n», memcmp («Привет, мир», «Привет, мир», 5));
36. printf ("memcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 World ", 8) =>% d \ n", memcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 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 несоответствующего символа. Вы можете использовать его в своем коде, который вам больше всего подходит.

Экранный трекпад и указатель мыши AppyMouse для планшетов с Windows
Пользователи планшетов часто пропускают указатель мыши, особенно когда они привыкли пользоваться ноутбуками. Смартфоны и планшеты с сенсорным экраном ...
Средняя кнопка мыши не работает в Windows 10
В средняя кнопка мыши помогает пролистывать длинные веб-страницы и экраны с большим объемом данных. Если это прекратится, вы в конечном итоге будете и...
Как изменить левую и правую кнопки мыши на ПК с Windows 10
Совершенно нормально, что все устройства компьютерной мыши эргономичны для правшей. Но есть мышиные устройства, специально разработанные для левшей ил...