【问题标题】:How to convert std::string to upper case? [duplicate]如何将 std::string 转换为大写? [复制]
【发布时间】:2018-02-09 17:51:29
【问题描述】:

我想将std::string 转换为大写。我知道函数toupper(),但是在过去我遇到过这个函数的问题,无论如何它都不是理想的,因为与字符串一起使用需要遍历每个字符。

是否有替代方法可以在当时以正确的方式工作?

【问题讨论】:

  • 如何将字符序列转换为大写可能不涉及迭代这些字符?
  • 为什么功能不存在,而不是一直重新创建轮子。 ISNUMERIC 和 REPLACE 是我最近遇到的另外两个例子。

标签: c++ c++11


【解决方案1】:

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

【讨论】:

  • “与字符串一起使用需要遍历每个字符。” 这里也一样,奶油、糖果和糖浆。
猜你喜欢
  • 2021-08-11
  • 2017-10-31
  • 2013-03-20
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
相关资源
最近更新 更多