我想将 a转换std::string为小写。我知道这个功能tolower()。然而,在过去我遇到过这个函数的问题,无论如何它都不是理想的,因为将它与 astd::string一起使用需要遍历每个字符。
std::string
tolower()
有没有 100% 有效的替代方案?
改编自 不太常见的问题 :
#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 这样的多字节编码时。