如何将 std::string 的实例转换为小写

新手上路,请多包涵

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

有没有 100% 有效的替代方案?

原文由 Konrad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

改编自 不太常见的问题

 #include <algorithm>
#include <cctype>
#include <string>

std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(),
    [](unsigned char c){ return std::tolower(c); });

如果不遍历每个角色,你真的不会逃脱。没有办法知道字符是小写还是大写。

如果你真的讨厌 tolower() ,这里有一个专门的 ASCII 替代方案,我不建议你使用:

 char asciitolower(char in) {
    if (in <= 'Z' && in >= 'A')
        return in - ('Z' - 'z');
    return in;
}

std::transform(data.begin(), data.end(), data.begin(), asciitolower);

请注意, tolower() 只能执行每个单字节字符的替换,这对于许多脚本来说是不合适的,尤其是在使用像 UTF-8 这样的多字节编码时。

原文由 Stefan Mai 发布,翻译遵循 CC BY-SA 4.0 许可协议

Google的 absl 库有 absl::AsciiStrToLower / absl::AsciiStrToUpper

原文由 DimanNe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题