当前位置: 首页 > news >正文

C++中std::string的=,+,+=使用过程中的问题

1. 调用构造函数时的=运算符不支持int,char类型的操作数 

string str1 = 'a';  //error

这是一个构造函数。C++中string是一个类,内部封装了char *来管理这个字符串。

string的构造函数:

  • string() // 创建一个空的字符串
  • string(const char * s)  // 使用字符串s初始化
  • string(const string& s)  // 使用一个string对象初始化另一个string对象
  • string(int n ,char c) // 使用n个字符c初始化(该字符串由n个字符c组成)

所以在初始化的时候没有char类型,所以error

2. 调用赋值运算函数时的=运算符支持int,char类型的操作数

    string str = "aaa";str = 'a';  //ok

这是一个赋值操作,把字符a赋值给当前的字符串,正确

3. 使用+和+=运算符

string s1="abc" +"de";    // error

原因:

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

原因:

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

    += 字符串拼接 支持char类型 

string s1="abcde";
string s2;
s2+=s1[0]+s1[1]+s1[2];	// error
s2=s2+s1[0]+s1[1]+s1[2]; // ok

 原因:

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

相关文章:

  • ruoyi-plus使用Statistic统计组件升级element-plus
  • Python基础入门例程72-NP72 生成字典(字典)
  • flink的java.lang.IllegalStateException: Buffer pool is destroyed 异常
  • 物联网AI MicroPython学习之语法 实时时钟RTC
  • GEE:kNN(k-最近邻)分类教程(样本制作、特征添加、训练、精度、最优参数、统计面积)
  • 【GitHub】保姆级使用教程
  • 【图表,饼图】【消费者选择餐厅关注因素】
  • Kotlin基础——Lambda和函数式编程
  • mysql忘记密码,然后重置
  • linux centos系统命令安装
  • 基于springboot实现高校食堂移动预约点餐系统【项目源码】计算机毕业设计
  • 栈和队列OJ题目——C语言
  • System-V共享内存和基于管道通信实现的进程池
  • Python武器库开发-前端篇之CSS基本语法(三十)
  • 微信小程序实现类似Vue中的computed、watch功能
  • [JVM] 美团二面,说一下JVM数据区域
  • 【React】useReducer
  • leetcode刷题详解二
  • 利用opencv/暗通道方法检测图像是否有雾-利用opencv/暗通道方法对深度学习目标检测算法结果进行二次识别提高准确率
  • Linux | 重定向 | 文件概念 | 查看文件 | 查看时间 | 查找文件 | zip
  • 【广州华锐互动】利用VR体验环保低碳生活能带来哪些教育意义?
  • python爬虫中 HTTP 到 HTTPS 的自动转换
  • 卷积神经网络(CNN)识别验证码
  • 使用 PyODPS 采集神策事件数据
  • 罗技M590鼠标usb优联连接不上
  • 天池 机器学习算法(一): 基于逻辑回归的分类预测
  • 45岁后,3部位“越干净”,往往身体越健康,占一个也要恭喜!
  • Windows安装Hadoop运行环境
  • 软件测试 | MySQL 主键约束详解:保障数据完整性与性能优化
  • 深入了解Linux中的scp命令及高级用法