本章内容: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添加一个不存在的字符串时,对于该对象没有影响。