wchar_t 的 isalpha 等效项
使用 wchar_t 的 isalpha 或 isalnum 的等效函数是什么?
wc 类型?
一个例子也很好,
谢谢
what is the equivalent function for isalpha or isalnum using wchar_t?
wctype ?
an example would be nice also
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
iswalpha
,iswalnum
。用法相同。iswalpha
,iswalnum
. Same usage.看看
std::isaplha
< /a> 来自
。可以将其用作std::isalpha
。Take a look at
std::isaplha<charT>
from<locale>
. Could use that asstd::isalpha<wchar_t>
.您在问题中包含“本地化”标签。在撰写国际申请时,您应该明确定义字母或数字字符的含义。如果您为 Windows 编写程序,我建议您使用
GetStringTypeEx
函数(请参阅 http://msdn.microsoft.com/en-us/library/dd318118.aspx)。例如,您还可以使用
CT_CTYPE3
或CT_CTYPE2
来确定字符是表意文字还是欧洲数字。更准确地说,只需尝试使用函数
iswalpha
、IsCharAlphaW
、iswalnum
、iswdigit
和GetStringTypeExW< /code> 测试以下字符:L'a'、L'ü'、L'á'、L'я'(俄语字符)、L'ノ'(日语片假名字符)、L'一'(1 中)日本人)。你会看到
代码
说你 L “一”不是欧洲号码。您可以使用
GetStringTypeExW
从例如阿拉伯数字等中确定欧洲数字。因此我建议您更准确地指定您的要求,然后根据要求选择API。一般来说,使用 C API 并不是国际应用程序的最佳方式。
You include tag "localization" in your question. In case of writing of international application you should clear define what do you mean under alphabetical or numerical characters. If you write programs for Windows I'll recommend you to use
GetStringTypeEx
function (see http://msdn.microsoft.com/en-us/library/dd318118.aspx). For example the codeYou can also use
CT_CTYPE3
orCT_CTYPE2
to determne whether a charachter is an Ideographic or whether it is an European number.To be more exact just try to use function
iswalpha
,IsCharAlphaW
,iswalnum
,iswdigit
andGetStringTypeExW
to test following charachters: L'a', L'ü', L'á', L'я' (Russian charackter), L'ノ' (Japanese charackter in Katakana), L'一' (1 in Japanese). You will see thatThe code
say you that L"一" is NOT a european number. You can use
GetStringTypeExW
to destinduish european number from for example arabic number etc.So I recommend you to specify your requirement more exactly and then choose the API based on the requirements. In general the usage of the C API is not the best way for an international application.
这取决于你如何定义“同等”。与 Unicode 字符类相比,C 字符类非常简单。例如,如果您想测试给定的代码点通常是否代表字母(对于“字母”的某些定义),您可以测试一般类别
L
;如果要检查给定字符串是否包含有效标识符,可以使用 UAX #31 等。iswalnum
和iswalpha
可能会根据当前的“区域设置”设置给出预期结果。It depends on how you define “equivalent.” The C character classes are quite simple minded compared to Unicode character classes. For example, if you want to test whether a given code point usually represents a letter (for some definition of “letter”), you could test for the general category
L
; if you want to check whether a given string comprises a valid identifier, you could use UAX #31, etc.iswalnum
andiswalpha
might give the intended result depending on the current “locale” setting.严格来说,这在 Visual Studio/Windows 下是不可能的,因为 wchar_t 在该平台上是 2 个字节,无法保存 unicode 代码点。
你真正需要的是一个接受 char* 的函数。据我所知,您在 ICU 里有一个。
另请参阅https://stackoverflow.com/questions/1049947/should-utf-16-被认为是有害的
Strictly speaking, this is not possible under visual studio/windows, because wchar_t is 2 bytes on this platform and is unable to hold a unicode codepoint.
What you really need is a function accepting char*. You have one in ICU AFAIK.
See also https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful
标头为
。基本的宏/函数名称中带有“w”:等等。
还有函数:
您可以写,例如:
或者您可以简单地写:
The header is
<wctype.h>
. The basic macro/function names have a 'w' in them:Etc.
There are also the functions:
You could write, for example:
Or you could simply write: