Função CompareStringEx (stringapiset.h)
Compara duas cadeias de caracteres Unicode (caractere largo), para uma localidade especificada por nome.
Sintaxe
int CompareStringEx(
[in, optional] LPCWSTR lpLocaleName,
[in] DWORD dwCmpFlags,
[in] _In_NLS_string_(cchCount1)LPCWCH lpString1,
[in] int cchCount1,
[in] _In_NLS_string_(cchCount2)LPCWCH lpString2,
[in] int cchCount2,
[in, optional] LPNLSVERSIONINFO lpVersionInformation,
[in, optional] LPVOID lpReserved,
[in, optional] LPARAM lParam
);
Parâmetros
[in, optional] lpLocaleName
Ponteiro para um nome de localidade ou um dos valores predefinidos a seguir.
[in] dwCmpFlags
Sinalizadores que indicam como a função compara as duas cadeias de caracteres. Por padrão, esses sinalizadores não são definidos. Esse parâmetro pode especificar uma combinação de qualquer um dos valores a seguir ou pode ser definido como 0 para obter o comportamento padrão.
Sinalizador | Significado |
---|---|
|
Ignorar maiúsculas e minúsculas, conforme linguisticamente apropriado. |
|
Ignore caracteres sem espaçamento, conforme linguisticamente apropriado.
Nota Esse sinalizador nem sempre produz resultados previsíveis quando usado com caracteres decompostos, ou seja, caracteres em que um caractere base e um ou mais caracteres não espaçados têm valores de ponto de código distintos.
|
|
Ignorar maiúsculas e minúsculas. Para muitos scripts (especialmente scripts latinos), NORM_IGNORECASE coincide com LINGUISTIC_IGNORECASE.
Nota NORM_IGNORECASE ignora qualquer distinção terciária, seja realmente caso linguístico ou não. Por exemplo, em scripts árabes e índices, isso distingue formas alternativas de um caractere, mas as diferenças não correspondem a maiúsculas e minúsculas linguísticas. LINGUISTIC_IGNORECASE faz com que a função ignore apenas maiúsculas e minúsculas linguísticas reais, em vez de ignorar o terceiro peso de classificação.
Nota Com esse sinalizador definido, a função ignora a distinção entre as formas largas e estreitas dos caracteres de compatibilidade do CJK.
|
|
Não diferencie entre caracteres hiragana e katakana. Os caracteres hiragana e katakana correspondentes são comparados como iguais. |
|
Ignorar caracteres sem espaçamento. Para muitos scripts (especialmente scripts latinos), NORM_IGNORENONSPACE coincide com LINGUISTIC_IGNOREDIACRITIC.
Nota NORM_IGNORENONSPACE ignora qualquer distinção secundária, seja ela diacrítica ou não. Scripts para idiomas coreano, japonês, chinês e índice, entre outros, usam essa distinção para fins diferentes de diacríticos. LINGUISTIC_IGNOREDIACRITIC faz com que a função ignore apenas os diacríticos reais, em vez de ignorar o segundo peso de classificação.
Nota NORM_IGNORENONSPACE só tem um efeito para localidades nas quais caracteres acentuados são classificados em uma segunda passagem de main caracteres. Normalmente, todos os caracteres na cadeia de caracteres são comparados primeiro sem considerar os acentos e, se as cadeias de caracteres forem iguais, uma segunda passagem sobre as cadeias de caracteres é executada para comparar acentos. Esse sinalizador faz com que a segunda passagem não seja executada. Para localidades que classificam caracteres acentuados na primeira passagem, esse sinalizador não tem efeito.
|
|
Ignorar símbolos e pontuação. |
|
Ignore a diferença entre caracteres de meia largura e largura total, por exemplo, C a t == cat. A forma de largura total é uma distinção de formatação usada em scripts em chinês e japonês. |
|
Use as regras linguísticas padrão para uso de maiúsculas e minúsculas, em vez de regras do sistema de arquivos. Observe que a maioria dos cenários para CompareStringEx usa esse sinalizador. Esse sinalizador não precisa ser usado quando seu aplicativo chama CompareStringOrdinal. |
|
Windows 7: Trate dígitos como números durante a classificação, por exemplo, classifique "2" antes de "10". |
|
Trate a pontuação da mesma forma que os símbolos. |
[in] lpString1
Ponteiro para a primeira cadeia de caracteres a ser comparada.
[in] cchCount1
Comprimento da cadeia de caracteres indicada por lpString1, excluindo o caractere nulo de terminação. O aplicativo poderá fornecer um valor negativo se a cadeia de caracteres for terminada em nulo. Nesse caso, a função determina o comprimento automaticamente.
[in] lpString2
Ponteiro para a segunda cadeia de caracteres a ser comparada.
[in] cchCount2
Comprimento da cadeia de caracteres indicada por lpString2, excluindo o caractere nulo de terminação. O aplicativo poderá fornecer um valor negativo se a cadeia de caracteres for terminada em nulo. Nesse caso, a função determina o comprimento automaticamente.
[in, optional] lpVersionInformation
Ponteiro para uma estrutura NLSVERSIONINFOEX que contém as informações de versão sobre a funcionalidade de NLS relevante; geralmente recuperado de GetNLSVersionEx.
Windows Vista, Windows 7: Reservados; deve definir como NULL.
[in, optional] lpReserved
Reservados; deve definir como NULL.
[in, optional] lParam
Reservados; deve ser definido como 0.
Retornar valor
Retornará um dos valores a seguir se tiver êxito. Para manter a convenção de runtime C da comparação de cadeias de caracteres, o valor 2 pode ser subtraído de um valor retornado diferente de zero. Em seguida, o significado de <0, ==0 e >0 é consistente com o runtime C.
- CSTR_LESS_THAN. A cadeia de caracteres indicada por lpString1 é menor em valor lexical do que a cadeia de caracteres indicada por lpString2.
- CSTR_EQUAL. A cadeia de caracteres indicada por lpString1 é equivalente em valor lexical à cadeia de caracteres indicada por lpString2. As duas cadeias de caracteres são equivalentes para fins de classificação, embora não necessariamente idênticas.
- CSTR_GREATER_THAN. A cadeia de caracteres indicada por lpString1 é maior em valor lexical do que a cadeia de caracteres indicada por lpString2.
- ERROR_INVALID_FLAGS. Os valores fornecidos para sinalizadores eram inválidos.
- ERROR_INVALID_PARAMETER. Qualquer um dos valores de parâmetro era inválido.
Comentários
CompareString e CompareStringEx são otimizados para serem executados na velocidade mais alta quando dwCmpFlags é definido como 0 ou NORM_IGNORECASE, cchCount1 e cchCount2 são definidos como -1, e a localidade não dá suporte a nenhuma compactação linguística, como quando a classificação tradicional em espanhol trata "ch" como um único caractere.
CompareString e CompareStringEx ignoram kashidas árabes durante a comparação. Portanto, se duas cadeias de caracteres forem idênticas, exceto pela presença de kashidas, a função retornará CSTR_EQUAL.
Quando o aplicativo usa os sinalizadores NORM_IGNORENONSPACE e NORM_IGNORECASE com a função de classificação, às vezes, os sinalizadores podem interferir nas comparações de cadeia de caracteres. Essa situação pode resultar em uma localidade que não dá suporte a caracteres não espaçados ou maiúsculas e minúsculas, mas usa níveis de peso equivalentes para lidar com outras operações importantes. Nesses casos, seu aplicativo deve usar os sinalizadores LINGUISTIC_IGNOREDIACRITIC e LINGUISTIC_IGNORECASE. Esses sinalizadores fornecem resultados linguisticamente apropriados para classificar pontos de código que usam marcas diacríticas e maiúsculas e minúsculas e não têm impacto sobre outros pontos de código.
A partir do Windows Vista: CompareString e CompareStringEx podem recuperar dados de localidades personalizadas. Não há garantia de que os dados sejam iguais de computador para computador ou entre execuções de um aplicativo. Se o aplicativo precisar persistir ou transmitir dados, consulte Usando dados de localidade persistente.
Começando no Windows 8: se o aplicativo passar marcas de idioma para essa função do namespace Windows.Globalization, ele deverá primeiro converter as marcas chamando ResolveLocaleName.
Começando em Windows 8: CompareStringEx é declarado em Stringapiset.h. Antes de Windows 8, ele foi declarado em Winnls.h.
Exemplos
Um exemplo mostrando o uso dessa função pode ser encontrado em NLS: Exemplo de APIs baseadas em nome.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | stringapiset.h (inclua Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |
Confira também
Manipulando a classificação em seus aplicativos
Funções de suporte à linguagem nacional
Considerações sobre segurança: recursos internacionais
Usando a normalização unicode para representar cadeias de caracteres