使用wchar_t对isalpha或isalnum的等效函数是什么?
wctype?
一个例子也不错
感谢
答案 0 :(得分:12)
iswalpha
,iswalnum
。相同的用法。
答案 1 :(得分:3)
您在问题中包含标记“本地化”。在编写国际申请的情况下,您应该明确定义字母或数字字符的含义。如果您为Windows编写程序,我建议您使用GetStringTypeEx
函数(请参阅http://msdn.microsoft.com/en-us/library/dd318118.aspx)。例如代码
BOOL bSuccess;
int isTrue;
WORD wCharType;
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE1, L"a", 1, &wCharType);
if (wCharType & C1_ALPHA == C1_ALPHA) {
//
}
您还可以使用CT_CTYPE3
或CT_CTYPE2
来确定字符集是表意文字还是欧洲字母。
更准确地说,只需尝试使用函数iswalpha
,IsCharAlphaW
,iswalnum
,iswdigit
和GetStringTypeExW
来测试以下字符:L'a' ,L'ü',L'á',L'я'(俄罗斯charackter),L'ノ'(日本chaakckter in Katakana),L'a''(日语1)。你会看到
代码
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE2, L"一", 1, &wCharType);
if ((wCharType & C2_EUROPENUMBER) == wCharType) {
// numeric
}
你说L“一”不是欧洲号码。您可以使用GetStringTypeExW
来驱逐欧洲号码,例如阿拉伯语号码等。
因此,我建议您更准确地指定您的要求,然后根据要求选择API。通常,C API的使用不是国际申请的最佳方式。
答案 2 :(得分:2)
从std::isaplha<charT>
查看<locale>
。可以将其用作std::isalpha<wchar_t>
。
答案 3 :(得分:1)
这取决于你如何定义“等价物”。与Unicode字符类相比,C字符类非常简单。例如,如果要测试给定代码点是否通常表示字母(对于“字母”的某些定义),则可以测试常规类别L
;如果要检查给定字符串是否包含有效标识符,可以使用UAX #31等。iswalnum
和iswalpha
可能会根据当前“区域设置”设置提供预期结果。
答案 4 :(得分:1)
严格地说,在visual studio / windows下这是不可能的,因为wchar_t在这个平台上是2个字节,并且无法保存unicode代码点。
你真正需要的是一个接受char *的函数。你在ICU AFAIK中有一个。
另见https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful
答案 5 :(得分:0)
标题为<wctype.h>
。基本的宏/函数名称中包含'w':
int iswalpha(wint_t wc);
int iswalnum(wint_t wc);
等
还有一些功能:
wctype_t wctype(const char *property);
int iswctype(wint_t wc, wctype_t desc);
你可以写一下,例如:
if (iswctype(wc, wctype("alnum")))
...process a wide alphanumeric...
或者你可以写一下:
if (iswalnum(wc))
...process a wide alphanumeric...