c++ unicode localization wchar-t

c++ - isalpha equivalente para wchar_t



unicode localization (6)

¿Cuál es la función equivalente para isalpha o isalnum usando wchar_t?

wctype?

un ejemplo sería bueno también

Gracias



El encabezado es <wctype.h> . Los nombres básicos de macro / función tienen una ''w'' en ellos:

int iswalpha(wint_t wc); int iswalnum(wint_t wc);

Etc.

También están las funciones:

wctype_t wctype(const char *property); int iswctype(wint_t wc, wctype_t desc);

Podrías escribir, por ejemplo:

if (iswctype(wc, wctype("alnum"))) ...process a wide alphanumeric...

O simplemente puedes escribir:

if (iswalnum(wc)) ...process a wide alphanumeric...



Depende de cómo se defina "equivalente". Las clases de caracteres C son bastante simples en comparación con las clases de caracteres Unicode. Por ejemplo, si desea probar si un punto de código dado usualmente representa una letra (para alguna definición de "letra"), puede probar para la categoría general L ; Si desea verificar si una cadena dada comprende un identificador válido, podría usar UAX # 31 , etc. iswalnum e iswalpha podrían dar el resultado esperado dependiendo de la configuración "local" actual.


Usted incluye la etiqueta "localización" en su pregunta. En el caso de escribir una solicitud internacional, debe definir claramente qué quiere decir con caracteres alfabéticos o numéricos . Si escribe programas para Windows, le recomendaré que use la función GetStringTypeEx (vea http://msdn.microsoft.com/en-us/library/dd318118.aspx ). Por ejemplo, el código

BOOL bSuccess; int isTrue; WORD wCharType; bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE1, L"a", 1, &wCharType); if (wCharType & C1_ALPHA == C1_ALPHA) { // }

También puede usar CT_CTYPE3 o CT_CTYPE2 para determinar si un carácter es un Ideographic o si es un número europeo.

Para ser más exactos solo intente utilizar la función iswalpha , IsCharAlphaW , iswalnum , iswdigit y GetStringTypeExW para probar los siguientes caracteres: L''a '', L''ü'', L''á '', L''я'' (carácter ruso), L ''ノ''(Caricatura japonesa en Katakana), L'' 一 ''(1 en japonés). Verás eso

  • iswalpha (L ''ノ'') retorno alfa
  • IsCharAlphaW (L ''ノ'') devuelve NO alfa
  • iswalnum (L ''一'') devuelve alfa o dígito
  • iswdigit (L ''一'') return NO dígito

El código

bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE2, L"一", 1, &wCharType); if ((wCharType & C2_EUROPENUMBER) == wCharType) { // numeric }

di que L "一" NO es un número europeo. Puede usar GetStringTypeExW para destinduish número europeo de, por ejemplo, número árabe, etc.

Por lo tanto, le recomiendo que especifique su requisito más exactamente y luego elija la API según los requisitos. En general, el uso de la API C no es la mejor manera para una aplicación internacional.