小编典典

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

all

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

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


阅读 143

收藏
2022-03-01

共1个答案

小编典典

改编自 不太常见的问题

#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 这样的多字节编码时。

2022-03-01