C++中string使用+号与int拼接方式_第1页
C++中string使用+号与int拼接方式_第2页
C++中string使用+号与int拼接方式_第3页
C++中string使用+号与int拼接方式_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C++中string使用+号与int拼接方式目录string使用+号与int拼接string类的+与+=运算符string对象的运算符+和运算符+=效率差很多为什么我在使用string的+运算或+=运算时会报错?

string使用+号与int拼接

由于C++中的没有默认的使用string类型直接用加号拼接数字,但是时长会使用的用string凭借数字的情况,所以重载了+和+=实现字符串与数字凭借功能。

将以下代码复制到需要使用位置的上方即可使用+和+=来拼接字符串和数字。

stringoperator+(stringcontent,intnumber){

stringtemp="";

chart=0;

while(true){

t=number%10+'0';

temp=t+temp;

number/=10;

if(number==0){

returncontent+temp;

}

}

//由于+=会调用+号,所以+=必须写在+号重载后面

string

operator+=(stringcontent,intnumber){

returncontent=content+number;

}

string类的+与+=运算符

说一说C++string类的运算符+与运算符+=

string对象的运算符+和运算符+=效率差很多

+比+=更耗时间更占空间

以下两句str=str+a;与str+=a;看起来差不多,其实效率差很多。

stringstr,a;str=str+a;str+=a;

今天在力扣上写代码,同一道题,同样的代码,差别就是我把str+=a;改成了str=str+a;运行时间翻了倍,而且内存消耗多了十几倍,如图:

虽说力扣上的运行时间会有波动,但也不至于差别这么大,然后我去搜了好些博客看,有些博主实际运行验证了在string的使用中,使用+=比使用+快很多。我翻《C++Primer》,大概知道了原因。

原因:

str=str+a;会先将等号右边的两个string对象内容相加,得到一个新的string对象,再把这个新的对象赋给等号左边的string对象。str+=a;直接将等号右边的string对象内容追加到左边的string对象后面。

这两者的差别就是,+相比于+=在这个过程中会多产生一个新对象,创建新对象,不仅要时间,新的对象还要占内存,所以+=效率较高。

为什么我在使用string的+运算或+=运算时会报错?

①例如在string后加上几个常量字符串:

strings1="abc"+"de";//错误

原因:

之所以两个string能相加,是因为string类把运算符+和+=都重载过,+和+=是string的重载函数。也可以把string和字符串常量相加,但必须保证每个加法运算符(+)的两侧的运算对象至少有一个是string。上面例子中的abc、de都是字符串常量(constchar类型),char是数据的基本类型,不是类,更没有重载过+和+=运算符,是没办法用加号直接相加的,所以会报错。

②为什么s1=s1+abc+de是对的,s1+=abc+de就错了?

strings1;

s1=s1+"abc"+"de";//正确

s1+="abc"+"de";//错误

原因:

s1=s1+abc+de是对的。前面提到,把string和字符串常量相加,但必须保证每个加法运算符(+)的两侧的运算对象至少有一个是string。s1+abc+de按照加号从左向右结合的顺序,会先让s1+abc,再让这个结果加上de,然后把这个结果赋给s1。是合法的。s1+=abc+de错了。因为要先得到+=右边的内容,也就是进行abc+de,字符串常量(constchar类型)没有办法直接相加。

再举一个例子:

strings1="abcde";

strings2;

s2+=s1[0]+s1[1]+s1[2];//错误

原因:

s1[n]返回的是s1的第n个字符的引用,是char类型,+=要先得到等号右边的内容,即进行s1[0]+s1[1]+s1[2],但char是不能直接相加的(几个char直接相加编译器会将它们对应的ASCII码相加,得到一个int型的数,得不到你想要的字符串拼接的效果),所以错了,改成s2=s2+s1[0]+s1[1]+s1[2];是ok的。

总之:在string使用时用+或+=出错,可能是你将两个字符串常量或者

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论