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.mzph.cn/news/170073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初阶(十二)string的模拟实现

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、string类的模拟实现1、构造、拷贝构造、赋值运算符重载以及析构函数2、迭代器类3、增删查…

GlobalWindow和Evictor的常用组合使用

背景 在平时的flink开发中,一旦我们使用到GlobalWindow,那么肯定也就意味着会搭配Evictor以及Tigger一起使用,只有这样才能触发窗口处理函数并且窗口内的元素数量限定在特定的范围内 GlobalWindow和Evictor常见组合用法 先看一下具体的搭配…

【linux】基本指令(中篇)

echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件,就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候,原文件内容不会被覆盖而是追加 more指令 10.more指令…

车载电子电器架构 ——电子电气架构设计方案概述

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文1万多字,认证码字,认真看!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

Vite CSS Module 优雅的处理样式隔离

今天介绍的是我写的一个vite插件vite-plugin-oneof-css-module,该插件主要处理scss module,那它适用于什么场景呢? 1. 最大的特点就是使用scss module 可以不用写 .module.scss 了 2. 可以根据不同的文件夹或文件分别进行不同的处理&#x…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成:pytestrequestsallure 设计模式: 关键字驱动 项目结构: 工具层:api_keyword/ 参数层:params/ 用例层:case/ 数据驱动:data_driver/ 数据层:data/ 逻…

AtCoder Beginner Contest 330 题解

目录 A - Counting PassesB - Minimize Abs 1C - Minimize Abs 2D - Counting LsE - Mex and Update A - Counting Passes 原题链接 题目描述 给定N个数和一个整数L,输出大于等于L的数的个数。 public static void solve() throws IOException{int n readInt(), m…

Blender快捷键总结

以下是一些Blender中常用的快捷键: 移动、旋转和缩放: G:移动选中的对象、顶点、边或面 R:旋转选中的对象、顶点、边或面 S:缩放选中的对象、顶点、边或面 Shift D:复制选中的对象 选择和编辑&#xff…

2311skia,01渲染架构

一,渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1,指令层:SkPicture,SkDeferredCanvas->SkCanvas 这一层决定要绘图的操作,绘图操作的预变换矩阵,当前裁剪区域,在哪些层上绘图,层的生成与合并. 2,解析层:SkBitmapDevice->SkDraw->SkScan,SkDraw1Glyph::Proc 这…

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍, 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日,Stability AI 推出了 Stable Video Diffusion,这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码,在 Huggin…

c语言刷题12周(1~5)

输入年月日,显示这一天是这一年的第几天,保证输入日期合法。 题干输入年月日,显示这一天是这一年的第几天,保证输入日期合法。输入样例2022 1 1 2022 12 31 2024 12 31 2022 4 5输出样例2022-1 2022-365 2024-366 2022-9…

【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录 1. 引言2. 邻接表表示图的原理2.1 有向权图2.2 无向权图2.3 无向非权图2.1 有向非权图 3. 实验内容3.1 实验题目(一)数据结构要求(二)输入要求(三)输出要求 3.2 算法实现 4. 实验结果 1. 引言 图是…

node.js解决输出中文乱码问题

个人简介 👨🏻‍💻个人主页:九黎aj 🏃🏻‍♂️幸福源自奋斗,平凡造就不凡 🌟如果文章对你有用,麻烦关注点赞收藏走一波,感谢支持! 🌱欢迎订阅我的…

shell脚本循环语句

目录 一. 循环语句 1. 循环条件 2. 循环次数 3. 循环命令区别 4. for 循环 ①. 第一种语法 ②. 第二种语法 5. while 循环 6. until 循环 二. 跳出循环 1. break 结束循环 2. continue 结束循环 3. exit 结束循环 三. 补充 1. 偶数的表示 2. 奇数的表示 一. 循环…

TOGAF —体系结构治理

本章提供了架构治理的框架和指南。 3.1 引言 本部分介绍治理的性质和治理级别。 3.1.1 企业内部的治理级别 架构治理是管理企业架构和其他架构的实践和方向 并在企业范围内进行控制。 架构治理通常不是孤立地运作,而是在治理结构的层次结构中运作,其中, 特别是在大型企…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好,我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客,从只会手工测试提升到自动化测试,这将对你的测试技术提升是非常大的,有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

香港证监会再点名,三家“可疑虚拟资产平台交易平台”!

JPEX事件之后,香港证监会通过对可疑平台进行曝光,以提升虚拟资产交易平台牌照申请的透明性。最近,香港证监会于官网再点名三家“可疑虚拟资产平台交易平台”。截至目前,香港证监会在官网共点名9家可疑虚拟资产交易平台。 据了解&a…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

一文带你深入理解MySQL的三大连接方式:左连接、右连接和内连接!

个人网站 本文首发于公众号小肖学数据分析 在MySQL中,常见的三种关联方式是左连接(left join)、右连接(right join)和内连接(inner join)。 本文我将详细介绍这三种关联方式,并提…