наверх с массивом char16_t - PullRequest
2 голосов
/ 19 мая 2011

Есть ли способ сделать это красиво.Когда я пытаюсь использовать 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 Ответ

2 голосов
/ 05 июня 2011

Лучший способ сделать это, вероятно, что-то вроде этого:

char16_t upper = std::use_facet<std::ctype<char16_t>>(std::locale()).toupper(ch);
...