如何使字符串大写(扩展ASCII)?

时间:2015-03-31 08:15:39

标签: c++ string uppercase extended-ascii toupper

我编写了这个函数,使字符串全部为大写。不幸的是,它不适用于扩展的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使用要快得多,但我找不到如何正确使用它的示例。

我希望了解有关区域设置及其使用的更多信息的任何提示。

0 个答案:

没有答案