Наверх с массивом char16_t
Есть ли способ сделать это красиво. Когда я пытаюсь использовать Boost's to_upper()
Я получаю std::bad_cast
Итак, я закончил что-то вроде этого:
while(str[i]!=u'\0')
{
str[i]=(char16_t)to_upper((wchar_t)str[i]);
i++;
}
Я даже не уверен, что это правильно, потому что я не знаю, гарантируется ли это, что to_upper
из char16_t
имеет тот же размер, что и оригинальный персонаж. И я не уверен, что это приведет к перезаписи следующего символа или повторному чтению второй половины последнего обработанного символа. Извините за мои глупые вопросы, но у меня есть проблемы, когда дело доходит до произвольного доступа и типов символов, которые имеют кодировки переменной длины.
1 ответ
Решение
Лучший способ сделать это, вероятно, что-то вроде этого:
char16_t upper = std::use_facet<std::ctype<char16_t>>(std::locale()).toupper(ch);