Функция 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.