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
相关产品推荐
相关产品推荐

