C++ wchar\u t的isalpha当量
使用wchar\u t的isalpha或isalnum的等效函数是什么 wctype 举个例子也不错C++ wchar\u t的isalpha当量,c++,unicode,localization,wchar-t,C++,Unicode,Localization,Wchar T,使用wchar\u t的isalpha或isalnum的等效函数是什么 wctype 举个例子也不错 谢谢iswalpha,iswalnum。同样的用法 文档-Windows(msdn) Docs-Linux(opengroup.org) 标题为。基本宏/函数名称中有一个“w”: int iswalpha(wint_t wc); int iswalnum(wint_t wc); 等等 还有以下功能: wctype_t wctype(const char *property);
谢谢
iswalpha
,iswalnum
。同样的用法
文档-Windows(msdn)
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...
看一看。可以将其用作
std::isalpha
这取决于如何定义“等效”。与Unicode字符类相比,C字符类非常简单。例如,如果要测试给定的代码点是否通常表示字母(对于“字母”的某些定义),可以测试一般类别L
;如果要检查给定字符串是否包含有效标识符,可以使用等。iswalnum
和iswalpha
可能会根据当前的“区域设置”设置给出预期结果。您的问题中包含标记“本地化”。在编写国际申请书的情况下,您应该清楚地定义字母或数字字符下的含义。如果您为Windows编写程序,我建议您使用GetStringTypeEx
函数(请参阅)。例如代码
BOOL bSuccess;
int isTrue;
WORD wCharType;
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE1, L"a", 1, &wCharType);
if (wCharType & C1_ALPHA == C1_ALPHA) {
//
}
您还可以使用CT\u CTYPE3
或CT\u CTYPE2
来确定字符是表意字符还是欧洲数字
更准确地说,只需尝试使用函数iswalpha
,IsCharAlphaW
,iswalnum
,iswdigit
和GetStringTypeExW
来测试以下字符:L'a',L'ü',L'á',L'Ø(俄语字符),L'ノ' (片假名中的日本角色),L'一' (1日文)。你会看到的
- 伊斯瓦尔法(L'ノ') 返回阿尔法
- IsCharAlphaW(L'ノ') 返回非阿尔法
- 伊斯瓦纳姆(L'一') 返回字母或数字
- 智能数字(L'一') 返回非数字
bSuccess = GetStringTypeExW (LOCALE_USER_DEFAULT, CT_CTYPE2, L"一", 1, &wCharType);
if ((wCharType & C2_EUROPENUMBER) == wCharType) {
// numeric
}
你说我“一" 不是欧洲数字。您可以使用GetStringTypeExW
从例如阿拉伯数字等中指定欧洲数字
因此,我建议您更准确地指定您的需求,然后根据需求选择API。一般来说,使用C API并不是国际应用程序的最佳方式。严格来说,在visual studio/windows下,这是不可能的,因为在此平台上,wchar\u t为2字节,无法容纳unicode码点 您真正需要的是一个接受char*的函数。您在AFAIK中有一个
另请参见我很确定Unicode的一半是多字节的,在一种字符类型中不需要保存一个代码点,因为它有整个遗留部分。DeadMG,你在说什么?我把你弄丢了……如果你不能将一个字符传递给一个函数,你就无法知道它是否是一个信。到目前为止还不错——你真的不能,这就是生活。