Функция strcmp сравнивает указанную строку с другой строкой, на которую указывает параметр s2. Функция учитывает регистр символов.
int strcmp (const char *s1, const char *s2); |
s1
Указатель на первую сравниваемую строку.
s2
Указатель на вторую сравниваемую строку.
Функция возвращает целочисленное значение:
- больше нуля, если первая строка больше второй;
- 0 (нуль), если строки равны;
- меньше нуля, если первая строка меньше втрой.
Библиотека стандартных функций С.
Функция объявлена в заголовочном файле string.h
Дополнение
Функции сравнивают строки.
int strcmp( const char *string1, const char *string2 ); int wcscmp( const wchar_t *string1, const wchar_t *string2 ); int _mbscmp( const unsigned char *string1, const unsigned char *string2 ); |
Строки с завершающим нулем, для сравнения.
Возвращаемое значение для каждой из этих функций указывает лексикографическое соотношение строки string1 к строке string2.
Значение |
Соотношение string1 к string2 |
---|---|
< 0 | string1 меньше чем string2 |
0 | string1 идентична string2 |
> 0 | string1 больше чем string2 |
При ошибке функция _mbscmp возвращает значение _NLSCMPERROR, которое определяется в заголовочных файлах STRING.H и MBSTRING.H.
Функция strcmp сравнивает строки string1 и string2 лексикографически и возвращает значение, служащее признаком их взаимозависимости. Функции wcscmp и _mbscmp - это широкосимвольная и состоящяя из многобайтовых символов версии функции strcmp. Параметры и возвращаемое значение wcscmp - широкосимвольные строки; таковые для _mbscmp являются состоящими из многобайтовых символов строками. _mbscmp распознает состоящие из многобайтовых символов последовательности согласно текущей многобайтовой кодовой странице и возвращает значение _NLSCMPERROR при ошибке. (Для получения дополнительной информации, см. Кодовые страницы). Иначе эти три функции ведут себя тождественно.
процедура TCHAR.H |
_UNICODE & _MBCS не определяется |
определяется как _MBCS |
определяется как _UNICODE |
---|---|---|---|
_tcscmp | strcmp | _mbscmp | wcscmp |
Функции strcmp отличаются от функций strcoll тем, что на сравнения при помощи strcmp, не оказывает влияния язык страны (местности), тогда как манера сравнений при помощи strcoll определяется категорией LC_COLLATE текущего языка страны. Дополнительную информацию о категории LC_COLLATE, см. описание функции setlocale.
В "C" язык страны (местности) определяет порядок символов в символьном наборе (символьный набор ASCII) такой же, что и лексикографический символьный порядок(очередность). Однако, в языках других стран, порядок символов в символьном наборе может отличаться от лексикографического порядка( очередности). Например, в некоторых европейских языках, символ 'a' (значение 0x61) предшествует символу 'ä' (значение 0xE4) в символьном наборе, но символ 'ä' предшествует символу 'a' лексикографически.
В языках страны (местности) для которых символьный набор и лексикографический символьный порядок (их очередность) различаются, используют функцию strcoll, а не strcmp для лексикографического сравнения строк согласно параметру категории LC_COLLATE текущего языка страны. Таким образом, чтобы выполнить лексикографическое сравнение языка страны в вышеупомянутом примере, используйте strcoll, а не strcmp. Альтернативно, Вы можете использовать функцию strxfrm исходных) строк, а затем использовать strcmp на получающихся строках.
Функции _stricmp, _wcsicmp, и _mbsicmp сравнивают строки первым преобразованием их к их формам нижнего регистра. Две строки, содержащие в себе символы, расположенные между 'Z' и 'a' в таблице ASCII ('[', '\', ']', '^', '_', и '`'), сравниваются по-разному, в зависимости от их регистра. Например, две строки, "ABCDE" и "ABCD ^" сравниваются одним способом, если сравнение идет в нижнем регистре ("abcde"> "abcd ^") и другим способом ("ABCDE" <"ABCD ^"), если сравнение - в верхнем регистре.
//crt_strcmp.c #include <string.h> #include <stdio.h> char string1[] = "The quick brown dog jumps over the lazy fox"; char string2[] = "The QUICK brown dog jumps over the lazy fox"; int main( void ) { char tmp[20]; int result; /* Зависит от регистра */ printf( "Compare strings:\n %s\n %s\n\n", string1, string2 ); result = strcmp( string1, string2 ); if( result > 0 ) strcpy( tmp, "greater than" ); else if( result < 0 ) strcpy( tmp, "less than" ); else strcpy( tmp, "equal to" ); printf( " strcmp: String 1 is %s string 2\n", tmp ); /* Не зависит от регистра (может использовать эквивалентную функцию _stricmp) */ result = _stricmp( string1, string2 ); if( result > 0 ) strcpy( tmp, "greater than" ); else if( result < 0 ) strcpy( tmp, "less than" ); else strcpy( tmp, "equal to" ); printf( " _stricmp: String 1 is %s string 2\n", tmp ); } ВыводСравниваемые строки: The quick brown dog jumps over the lazy fox The QUICK brown dog jumps over the lazy fox strcmp: Строка 1 больше чем строка 2 _stricmp: Строка 1 равна строке 2
|
Программы преобразования строк | memcmp | _memicmp | strcoll, Функции | _stricmp | strncmp | _strnicmp | strrchr | strspn | strxfrm | Подпрограммы Исполняющей среды и Эквиваленты .NET_Framework
Подпрограмма |
Необходимый заголовочный файл |
Совместимость |
---|---|---|
strcmp | <string.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
wcscmp | <string.h> или <wchar.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
_mbscmp | <mbstring.h> | Win 98, Win Me, Win NT, Win 2000, Win XP |
Дополнительную информацию о совместимости, см. в статье Совместимость во Введении.
Все версии Библиотек исполняющей системы языка C.