Как сделать строку в верхнем регистре (расширенный ASCII)?

Я написал эту функцию, чтобы сделать строку в верхнем регистре. К сожалению, он не работает с расширенными символами ASCII, такими как ä, ö, ü, é, è и так далее. Как я могу преобразовать строку в верхний регистр и также преобразовать эти символы (Ä, Ö, Ü, É, È)?

void toUppercase1(string & strInOut)
{
std::locale loc;
for (std::string::size_type i=0; i<strInput.length(); ++i)
{
strInput.at(i) = std::toupper(strInput.at(i),loc);
}
return;
}

Это новая версия.

#include <clocale>
void toUppercase2(string& strInput)
{
setlocale(LC_CTYPE, "sv_SE");

for (std::string::size_type i=0; i<strInput.length(); ++i) {
strInput.at(i) = toupper(strInput.at(i));
}

// reset locale
setlocale(LC_ALL, "");

return;
}

К сожалению, приведенный выше метод toUppercase2 (строка&) очень медленно. Кажется, что глобальная смена языка требует определенных усилий. Я предполагаю, что использование объекта локали из C ++, который инициализируется один раз, а затем используется toupper, намного быстрее, но я не могу найти пример того, как его правильно использовать.

Любые подсказки, где я могу найти больше информации о локалях и их использовании приветствуются.

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]