Есть ли способ сделать это красиво. Когда я пытаюсь использовать подталкивание-х to_upper()
, я получаю std::bad_cast
, так что я закончил что-то вроде этого:to top с char16_t array
while(str[i]!=u'\0')
{
str[i]=(char16_t)to_upper((wchar_t)str[i]);
i++;
}
Я даже не уверен, что это правильно, потому что я не знаю, если это гарантирует, что to_upper
char16_t
имеет тот же размер, что и исходный символ. И я не уверен, что это вызовет перезапись следующего персонажа или повторное чтение второй половины последней прессованной. Извините за мои глупые вопросы, но у меня проблемы, когда дело доходит до произвольного доступа и типов символов, которые имеют кодировки переменной длины.
Мы не знаем, если char16_t и wchar_t имеют одинаковый размер ** или ** ту же кодировку, если вы не проверить вашу конкретную систему , –
О, это ад :) Есть ли чистый способ сделать это? Возможно, сначала заполнить массив tmp с верхним регистром, а затем скопировать верхнюю часть с tmp на str. – NoSenseEtAl
Проблема, конечно, в том, что мы не знаем (портативно), что такое wchar_t. Вот почему мы получили новые char16_t и char32_t. Тем не менее, они получили поддержку основного языка и работают со std :: string, но не поддерживаются в остальной части библиотеки. –