Descripción detallada de lstrcmp y caracteres alfabéticos

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Síntomas

Ejecutar la siguiente función en las devoluciones de idioma inglés -1, que indica que una 'e' minúscula es menor que un 'Z' en mayúsculas:
   lstrcmp("e","Z");
Esto es contrario a la orden de caracteres mediante la ordenación de ASCII. Sin embargo, es el comportamiento correcto o lstrcmp().

Causa

lstrcmp() realiza una comparación de la misma manera como un diccionario real. Se comparan caracteres en mayúsculas y minúsculas en primer lugar y después se comparan los detalles específicos (por ejemplo, en minúsculas y mayúsculas).


lstrcmp() realiza sus comparaciones, configure un peso principal y secundario. El peso principal es el valor de los caracteres después de convertir a mayúsculas. El peso secundario describe si el personaje estaba originalmente en mayúsculas o minúsculas.


Con ayuda de la tabla ASCII estándar (0... 9ABC... XYZabc... xyz), los siguientes son ejemplos de lstrcmp:
"A" < "a" < "B" < "b"
"Aaa" < "aaa" < "Aab"
"En el primer ejemplo, A" es menor que "a" porque:

  1. Ambos caracteres se convierten a mayúsculas.
  2. Los pesos principales se comparan y se encuentra iguales.
  3. Debido a los pesos principales son iguales, se comparan los pesos secundarios. A continuación, se determina que "A" es menor que "a" porque "a" es mayor en el gráfico de ASCII.
También en el primer ejemplo, "a" es menor que "B" porque:

  1. Ambos caracteres se convierten a mayúsculas.
  2. Los pesos principales se comparan y se determina que "A" es menor que "B" en la tabla del ASCII. Se realiza ninguna comparación de peso secundario.
En el segundo ejemplo, "Aaa" es inferior a "aaa" siguiendo la misma lógica que se muestra en la comparación de "A" y "a".


Cuando se comparan dos caracteres son iguales, esto se denomina una "colisión" y "retrasa la comparación" se realizará con el peso secundario.

MÁS EJEMPLOS

   e,a  --> E,A --> E>A = 1
e,e --> E,E --> E=E = 0 Because they are equal, the case is
checked (secondary weight).
e,z --> E,Z --> E<Z = -1

e,A --> E,A --> E>A = 1
e,E --> E,E --> E=E = 1 Because they are equal, the case is
checked (secondary weight).
e,F --> E,F --> E<F = -1

Solución

Si necesita ordenar por valores ASCII utilizando mayúsculas y minúsculas, utilice el strcmp() de la función de tiempo de ejecución de C o _fstrcmp().


También, las aplicaciones basadas en Windows del Lejano Oriente adoptarán esta técnica en los idiomas inglés y locales de orden del diccionario.


Para obtener información detallada sobre el criterio de ordenación utilizado con caracteres no alfabéticos, caracteres acentuados y caracteres de idiomas internacionales, busque las palabras siguientes en esta Base de conocimientos:
lstrcmpi e internacionales y ordenar
Propiedades

Id. de artículo: 96748 - Última revisión: 13 ene. 2017 - Revisión: 1

Comentarios