Я написал эту функцию, чтобы сделать строку в верхнем регистре. К сожалению, он не работает с расширенными символами 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, намного быстрее, но я не могу найти пример того, как его правильно использовать.
Любые подсказки, где я могу найти больше информации о локалях и их использовании приветствуются.
Задача ещё не решена.