我编写了这个函数,使字符串全部为大写。不幸的是,它不适用于扩展的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(string&amp;)非常慢。似乎全球范围内更改区域设置需要一些努力。我假设使用来自C ++的语言环境对象,它被初始化一次然后被toupper使用要快得多,但我找不到如何正确使用它的示例。
我希望了解有关区域设置及其使用的更多信息的任何提示。