You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ string类insert()函数插入字符:覆盖原字符还是移位?

C++ string::insert() 插入行为详解(结合你的格式化示例)

嘿,这个问题问得很关键!我来给你把string类insert()函数的行为和你示例里的场景讲明白:

核心结论

C++ string类的insert()函数绝对不会覆盖原位置已有的字符,它会先把指定位置及之后的所有字符向后移位,腾出足够的空间,再把要插入的内容放进去——原内容会完整保留,只是位置后移了。

结合你的示例代码分析

我们拿你给出的输入1084567.89一步步拆解:

1. 插入逗号的过程

首先代码找到小数点位置dp = 7(字符串"1084567.89"的索引从0开始,.在第7位),因为dp>3,进入循环:

  • 第一次循环x = 7-3 = 4,执行currency.insert(4, ","):
    原位置4的字符是5,插入逗号后,5以及后面的67.89全部向后移一位,字符串变成"1084,567.89"。
  • 第二次循环x = 4-3 = 1,执行currency.insert(1, ","):
    原位置1的字符是0,插入逗号后,0以及后面的84,567.89全部向后移一位,字符串变成"1,084,567.89"。

2. 插入美元符号的过程

最后执行currency.insert(0, "$"):
原位置0的字符是1,插入$后,1以及后面的所有内容都向后移一位,字符串就变成了最终的"$1,084,567.89",和示例输出完全匹配。

额外补充

string::insert()是C++标准库中字符串操作的核心函数之一,它支持多种插入形式(单个字符、字符串、子串等),但所有形式的插入逻辑都是一致的:移位腾出空间,插入新内容,原内容保留后移,不会出现覆盖的情况。


内容的提问来源于stack exchange,提问作者Subhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:13:35