【发布时间】:2020-11-02 19:31:06
【问题描述】:
我正在尝试使用替换功能将大写字母替换为小写字母。我尝试这样做的方式是,当被检查的字母在 ASCII 值 65-90 之间时,它将被替换为 ASCII 值高 32 个的字符,例如,65 将变为 97(A 到)。
char holder = (userPhrase[count]) + 32;
jumbledPhrase.replace(count, 1, holder);
变量持有者的点 为了保存要在替换中使用的新值,我收到一条错误消息,说持有者在替换函数中不算作 char 参数。甚至可以以我尝试使用的方式使用替换吗?
【问题讨论】:
-
无关:此分配是否禁止使用
tolower函数?使用库函数几乎总是更好,因为作者已经考虑到您可能错过的许多边缘情况,例如非 ASCII 目标,并且他们的假设将适用于数以百万计的 C++ 程序。 -
如果您遇到编译器错误,请在问题中发布错误并显示minimal reproducible example。相关问题:stackoverflow.com/questions/313970/…
-
@user4581301 我敢肯定,
std::tolower完全不适合任何多字节或可变字节长度编码(例如 UTF-8)并且真的只对古代 8- 有用位“扩展 ASCII”代码页。除非您有严格的、受控的输入约束,否则您不应该在 one C++ 程序中编写std::tolower,更不用说数以百万计的了。 -
有locale-aware version,但这是C++ 对宽字符的混乱处理更普遍的问题。我的观点是,
tolower几十年来已经被部署了无数次,其成功率远高于那里几乎无限数量的自滚版本。