C++ wchar\u t的isalpha当量

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);

使用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);
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,你在说什么?我把你弄丢了……如果你不能将一个字符传递给一个函数,你就无法知道它是否是一个信。到目前为止还不错——你真的不能,这就是生活。