wchar_t 的 isalpha 等效项

发布于 2024-09-12 10:32:18 字数 91 浏览 4 评论 0原文

使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

最近可好 2024-09-19 10:32:18

iswalphaiswalnum。用法相同。

iswalpha, iswalnum. Same usage.

記憶穿過時間隧道 2024-09-19 10:32:18

看看 std::isaplha< /a> 来自 。可以将其用作 std::isalpha

Take a look at std::isaplha<charT> from <locale>. Could use that as std::isalpha<wchar_t>.

七月上 2024-09-19 10:32:18

您在问题中包含“本地化”标签。在撰写国际申请时,您应该明确定义字母或数字字符的含义。如果您为 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_CTYPE3CT_CTYPE2 来确定字符是表意文字还是欧洲数字。

更准确地说,只需尝试使用函数 iswalphaIsCharAlphaWiswalnumiswdigitGetStringTypeExW< /code> 测试以下字符:L'a'、L'ü'、L'á'、L'я'(俄语字符)、L'ノ'(日语片假名字符)、L'一'(1 中)日本人)。你会看到

  • iswalpha (L'ノ') return alpha
  • IsCharAlphaW (L'ノ') return NOT alpha
  • iswalnum (L'一') return alpha or digital
  • iswdigit (L'一') return NOT digital

代码

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

说你 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 code

BOOL bSuccess;
int isTrue;
WORD wCharType;

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

You can also use CT_CTYPE3 or CT_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 and GetStringTypeExW to test following charachters: L'a', L'ü', L'á', L'я' (Russian charackter), L'ノ' (Japanese charackter in Katakana), L'一' (1 in Japanese). You will see that

  • iswalpha (L'ノ') return alpha
  • IsCharAlphaW (L'ノ') return NOT alpha
  • iswalnum (L'一') return alpha or digit
  • iswdigit (L'一') return NOT digit

The code

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

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.

小…楫夜泊 2024-09-19 10:32:18

这取决于你如何定义“同等”。与 Unicode 字符类相比,C 字符类非常简单。例如,如果您想测试给定的代码点通常是否代表字母(对于“字母”的某些定义),您可以测试一般类别 L;如果要检查给定字符串是否包含有效标识符,可以使用 UAX #31 等。 iswalnumiswalpha 可能会根据当前的“区域设置”设置给出预期结果。

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 and iswalpha might give the intended result depending on the current “locale” setting.

惯饮孤独 2024-09-19 10:32:18

严格来说,这在 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

儭儭莪哋寶赑 2024-09-19 10:32:18

标头为 。基本的宏/函数名称中带有“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...

The header is <wctype.h>. The basic macro/function names have a 'w' in them:

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

Etc.

There are also the functions:

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

You could write, for example:

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

Or you could simply write:

if (iswalnum(wc))
    ...process a wide alphanumeric...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文