Поделиться через


strcmp, wcscmp, _mbscmp

Сравнение строк.

Важное примечаниеВажно

_mbscmp нельзя использовать в приложениях, выполняемых в Среда выполнения Windows.Дополнительные сведения см. в разделе Функции CRT не поддерживаются при /ZW.

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.

Значение

Связь string1 и string2

< 0

string1, string2

0

идентично string1 на string2

> 0

Значение параметра string1 больше величины string2

При ошибке _mbscmp возвращает _NLSCMPERROR, которая определена в STRING.H и MBSTRING.H.

Заметки

Функция strcmp сравнивает string1 и string2 лексикографически и возвращает значение, которое указывает на их связи.wcscmp и _mbscmp соответственно, версии, юникод и многобайтовой кодировки strcmp._mbscmp распознает последовательности многобайтовых символов в соответствии с текущей многобайтовой кодовой страницей и возвращает _NLSCMPERROR при ошибке.Для получения дополнительной информации см. Кодовые страницы.Кроме того, если string1 или string2, то указатель _mbscmp вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если среда выполнения может продолжить, то _mbscmp возвращает _NLSCMPERROR и задает для errno значение EINVAL.strcmp и wcscmp не проверяют свои параметры.В остальных случаях эти три функции ведут себя идентично.

Универсальное текстовое сопоставление функций

Функция TCHAR.H

неопределенные _UNICODE & _MBCS

определенные _MBCS

Определение _UNICODE

_tcscmp

strcmp

_mbscmp

wcscmp

Функции strcmp отличаются от функций strcoll тем, что сравнения strcmp не влияет на языкового стандарта, тогда как изображение сравнений strcoll определяется по категории LC_COLLATE текущего языкового стандарта.Дополнительные сведения о категории LC_COLLATE см. в разделе setlocale, _wsetlocale.

В языковом стандарте "C", порядок символов в кодировке (кодировке ASCII) совпадает с лексикографический порядок символов.Однако в других языковых стандартах, порядок символов в кодировке лексикографического может отличаться от порядка.Например, в некоторых европейских языковых стандартах, символ "a" (значение 0x61) предшествует символ "ä" (значение 0xE4) в кодировке, только ä" предшествует символ "символ "a" лексикографически.

Языковых стандартах, для которых кодировка и лексикографический порядок два символа, используйте strcoll вместо strcmp для лексикографического сравнения строк согласно параметру категории LC_COLLATE текущего языкового стандарта.Чтобы выполнить лексикографическое сравнение языкового стандарта в предыдущем примере, используйте strcoll вместо strcmp.Также можно использовать strxfrm в исходной строки, а затем использовать strcmp для результирующих строк.

_stricmp, _wcsicmp и _mbsicmp сравнивают строки сначала преобразовать их в их в нижнем регистре формы.2 Строки, содержащие символы, которые расположены между "Z" и "a" в таблице " [ASCII (", "]", '\', '^', '_'и '`') " по-разному, в зависимости от их варианта.Например, 2 строки "ABCDE" и "ABCD^" ", если один способ сравнения в нижнем регистре > ("abcde""abcd^") и другие способы, < ("ABCDE""ABCD^"), если сравнение прописными буквами.

Требования

Функция

Требуемый заголовок

strcmp

<string.h>

wcscmp

<string.h> или <wchar.h>

_mbscmp

<mbstring.h>

Для дополнительных данных о совместимости см. в разделе Совместимость.

Библиотеки

Все версии Библиотек времени выполнения C.

Пример

// crt_strcmp.c

#include <string.h>
#include <stdio.h>
#include <stdlib.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;

   // Case sensitive
   printf( "Compare strings:\n   %s\n   %s\n\n", string1, string2 );
   result = strcmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof (tmp), "less than" );
   else
      strcpy_s( tmp, _countof (tmp), "equal to" );
   printf( "   strcmp:   String 1 is %s string 2\n", tmp );

   // Case insensitive (could use equivalent _stricmp)
   result = _stricmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof (tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof (tmp), "less than" );
   else
      strcpy_s( tmp, _countof (tmp), "equal to" );
   printf( "   _stricmp:  String 1 is %s string 2\n", tmp );
}
  

Эквивалент в .NET Framework

System::String::CompareOrdinal

См. также

Ссылки

Управление строками (CRT)

memcmp, wmemcmp

_memicmp, _memicmp_l

функции strcoll

_stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l

strncmp, wcsncmp, _mbsncmp, _mbsncmp_l

_strnicmp, _wcsnicmp, _mbsnicmp, _strnicmp_l, _wcsnicmp_l, _mbsnicmp_l

strrchr, wcsrchr, _mbsrchr, _mbsrchr_l

strspn, wcsspn, _mbsspn, _mbsspn_l

strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l