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

4
我想把一个std::string转换为大写形式。我知道有toupper()函数,但是过去我使用这个函数时遇到了问题,并且在处理字符串时需要迭代每个字符,这并不理想。
有没有其他方法可以正确地实现这个功能?

1
将一系列字符转换为大写,怎么可能不涉及迭代这些字符呢? - user2100815
为什么功能不是已经存在,而不是每次都要重新发明轮子呢?ISNUMERIC和REPLACE是我最近遇到的另外两个例子。 - David
1个回答

3

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); });

“使用字符串需要迭代每个字符”,同样的,加上奶油、糖果和糖浆。 - user9212993

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接