C++ 替换函数
Posted
技术标签:
【中文标题】C++ 替换函数【英文标题】:C++ replace function 【发布时间】: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。相关问题:***.com/questions/313970/…
@user4581301 我敢肯定,std::tolower
完全不适合任何多字节或可变字节长度编码(例如 UTF-8)并且真的只对古代 8- 有用位“扩展 ASCII”代码页。除非您有严格的、受控的输入约束,否则您不应该在 one C++ 程序中编写 std::tolower
,更不用说数以百万计的了。
有locale-aware version,但这是C++ 对宽字符的混乱处理更普遍的问题。我的观点是,tolower
几十年来已经被部署了无数次,其成功率远高于那里几乎无限数量的自滚版本。
【参考方案1】:
使用tolower()
,避免使用幻数,让您(以及您的代码阅读器)的生活更轻松。
阅读@churill 评论的How to convert std::string to lower case? 中的其他替代方案,例如std::transform
。
【讨论】:
相关:What is a magic number, and why is it bad? 好点。我将使用它。谢谢。我还将研究 transform 以了解它是如何工作的。现在,下面的约翰给出了一个可行的解决方案。 @The_Redhawk 很高兴我能帮上忙。所有三个答案都有效,只要确保选择适合您需要的答案,干杯。【参考方案2】:我想你正在寻找
jumbledPhrase.replace(count, 1, 1, holder);
将字符串jumbledPhrase
中count
位置处的1
(第一个1)字符替换为1
字符holder
的副本(第二个1)。
参考here,如果你真的在寻找其他东西
【讨论】:
当然更直接的方法是jumbledPhrase[count] = holder;
【参考方案3】:
使用replace()
替换单个char
是多余的,只需使用operator[]
代替,您已经在使用它来访问正在被替换的源char
:
char holder = userPhrase[count] + 32;
jumbledPhrase[count] = holder;
【讨论】:
以上是关于C++ 替换函数的主要内容,如果未能解决你的问题,请参考以下文章