Часть проекта включает в себя нечто похожее на прокручиваемый «тикер запаса», где большая строка «прокручивается» по выходной строке фиксированной ширины.
Используя C ++ 11 на Linux, концепция заключается в том, что Очистить при использовании латинских символов. Примерно так:
std::string inputString, outputString;
for (int inIdx = 0; inIdx < inputString.size(); inIdx++)
{
// shift output one character left
for (int i = 0; i < mOutputTextWidth - 1; i++)
outputString[i] = outputString[i+1];
// Append character to end of output
if (inIdx < inputString.size())
outputString[mTextWidth] = inputString.at(inIdx);
sleep(1);
}
Вы получите что-то вроде:
[ ]
[ H]
[ HE]
[ HEL]
[ HELLO]
[ HELLO ]
[ HELLO ]
[ HELLO ]
Мне нужно, чтобы это работало для нелатинских символов UTF-8. Из того, что я прочитал, это сложная тема. В частности, std::string::at
или []
возвращает символ, который разбивается на длинные символы UTF-8.
В C ++, как правильно это сделать?
Например. Японский
[ ]
[ こ]
[ こん]
[ こんば]
[ こんばん]
[ こんばんは]
[ こんばんは ]
[ こんばんは ]
(я знаю, что ширина глифа зависит от языка, это нормально. Я просто не могу понять, как манипулировать строками UTF-8)