如何将std :: string转换为大写?

时间:2018-02-09 17:51:30

标签: c++ c++11

我想将std::string转换为大写。我知道函数toupper(),但是在过去我遇到了这个函数的问题,但是因为使用字符串需要迭代每个字符,所以它几乎不理想。

有没有一种方法能够以正确的方式运作?

1 个答案:

答案 0 :(得分:2)

std::toupper有几个重载

  • template <class charT> charT toupper(charT, const locale&)
  • int toupper(int ch)

因此,取其地址可能会很复杂。

您可以使用lambda让编译器找到正确的重载:

(此外,由于char可能已签名,toupper期望unsigned char值(或EOF))

std::transform(s.begin(), s.end(), s.begin(),
               [](unsigned char c){ return std::toupper(c); });