string类那些不容易被发现的事情(string类的+和+=)

本文揭示了C++中string类使用+=与不存在字符的交互导致size()增长的细节,强调了在处理字符串时避免低级错误的重要性,以及正确使用append进行部分字符串添加的方法。
摘要由CSDN通过智能技术生成

本章内容:string += '\0',会让string表面上没有变,实际上size()会变大,之前我是大笨蛋,既然这个都不知道,搞错了这么多。

以下不要看,误导人,留着是为了警醒我犯下的低级错误!!!!


最近在做力扣题的时候,我发现了string类  += 不存在字符会使得 这个string类的size()变大一个子节。

举例子

这里的string 用的就是STL里面的string类,tmp[3]是不存在的,因此我之前会以为num.size()还是3,竟然会变成了4。

一个正常的string类是这样的,你不去  +=\'0'  后面是不会存在'\0'的。

后续你去  += 了一个不存在的字符,会使得num后面多添了一个'\0'  ,但你如果不展开来看,直接看num的值你又发现没问题,因此这个点还挺难看到的。就是因为这个,导致我后面所做的字符串加法的操作错位, 因此答案不对。

上面是 += 一个不存在的字符,而C++想要 += 一个不存在的字符串是不可行的,连 += 一个部分字符串都不可以,更不要说不存在的字符串,要加等一个部分字符串需要append。

比如num+=(tmp,3,1)

这句代码的因为tmp索引为3不存在,因此会在num后面直接增加一个ascii码为1的字符

但是使用append是可以增加部分字符串的,只不过下图这里tmp索引为3后面没有空间,因此tmp数组没有变化

使用append添加一个部分的正常字符串,则是没问题的

总结:

        string += 添加一个不存在的字符时,会使得size()+1,string += 不能添加一个部分字符串,如果需要添加部分字符串需要用 append,使用append添加一个不存在的字符串时,对于该对象没有影响。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值