【问题标题】:converting std::string to upper case without modifying source将 std::string 转换为大写而不修改源
【发布时间】:2014-11-11 02:58:20
【问题描述】:

我熟悉 std::transform(data.begin(), data.end(), data.begin(), ::toupper) 的用法,它可以将 data 中的字符串全部变为大写。但是,我想知道是否有一个干净的解决方案可以在不修改源代码的情况下获得字符串的全大写版本?制作一个源副本,然后在副本上调用 std::transform,然后返回副本的解决方法似乎有点像 kludge,我想知道是否有更有效和优雅的解决方案。

我正在寻找一个纯 C++11 解决方案...不依赖于任何广泛可用的 C++ 库,例如 boost。

【问题讨论】:

  • "制作一个源的副本,然后在副本上调用 std::transform,然后返回副本" 与不更改源的效率一样高。跨度>
  • 你的意思是在编译时字符串以某种方式变为大写,而在源代码中变为小写?
  • std::string udata; std::transform(data.begin(), data.end(), std::back_inserter(udata), ::toupper);。没有什么说转型必须就地进行。
  • 如果您将该评论作为答案发布,我会将其标记为正确答案,并且该问题可以标记为已回答。我从来不知道std::back_inserter。最酷。谢谢。

标签: c++11 toupper


【解决方案1】:

根据上面 Igor 的评论,解决方案是在目标上使用 std::back_inserter....std::transform(src.begin(), src.end(), std::back_inserter(dest), ::toupper);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多