<thing> эквивалентов для char32_t - PullRequest
2 голосов
/ 22 февраля 2020

Существуют ли какие-либо эквиваленты для функций char (ispace, isalpha, et c), определенных в <ctype> для char32_t?

Я осмотрелся и мог видеть только iswspace (& related ), которые, похоже, предназначены для 16-битных символов.

Примечание: хотя isspace принимает в качестве параметра значение типа int, оно, похоже, приводит к ошибочным результатам для символов Юникода.

Пример:

char32_t dagger = U'?';
if (isspace(dagger)) {
    puts("That is a space!");
}

Будет выводить "Это пробел!"

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

До wchar_t вы можете использовать std :: isalpha с подходящим языковым стандартом, определенным в <locale>.

Для любого значения выше 0xFFFF вам потребуется библиотека ICU:

u_isalpha или u_isUAlphabeti c

u_isspace или u_isUWhiteSpace

Полный список функций: uchar.h

0 голосов
/ 22 февраля 2020

В то время как C ++ - язык имеет средства для генерации значений Unicode, C ++ - библиотека почти полностью глуха к Unicode. <ctype.h> и <cctype> понятия не имеют, как обрабатывать значения Unicode; их функциональные возможности основаны на C языковом механизме . Ваша реализация может предоставлять локали, которые знают, что такое Unicode, но локаль "C", используемая по умолчанию, не является одной из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...