给定string foo,我已经写了answers关于如何使用cctype tolower 将字符转换为小写

transform(cbegin(foo), cend(foo), begin(foo), static_cast<int (*)(int)>(tolower))

但是我有begun to consider locale tolower ,可以这样使用:
use_facet<ctype<char>>(cout.getloc()).tolower(data(foo), next(data(foo), foo.size()));
  • 是否有理由更喜欢其中之一?
  • 它们的功能是否完全不同?
  • 除了意思是tolower接受并返回int(我认为这只是一些陈旧的C东西)以外,我的意思是?
  • 最佳答案

    不幸的是,两者都同样糟糕。尽管std::string伪装成utf-8编码的字符串,但方法/函数(包括tolower)中的任何一个都不真正知道utf-8。因此,tolower/tolower +语言环境可能适用于单字节(= ASCII)字符,对于其他每种语言,它们都会失败。

    在Linux上,我将使用ICU库。在Windows上,我将使用CharUpper函数。

    关于c++ - 在C++中哪个更低?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37482246/

    10-11 07:07