自修C++Primer----3.2标准库类型string

news2024/9/25 15:29:24

目录

1.String的相关操作

1.1拷贝初始化&&直接初始化

1.2显示创建临时对象

1.3读取string对象内容

1.4一次读取多个未知对象

1.5使用getline读取一整行内容

1.6size()的返回值size_type类型

1.7两个string对象比较

1.8string对象赋值

1.9两个string对象相加


1.String的相关操作

上面这个表里面介绍了初始化string的几种方式,例如这个默认的初始化,拷贝构造初始化,使用字面值进行初始化,连续字符进行初始化;

1.1拷贝初始化&&直接初始化

使用等号进行连接的,就是拷贝初始化,这个不是赋值,因为这个地方是使用一个已经存在的对象去初始化另外一个新创建的对象,如果这个s5本来就有内容,这个时候等号才叫做赋值;

下面的这个s6,s7都属于直接进行初始化,没有使用等号进行连接;

1.2显示创建临时对象

上面介绍的这个s7就是使用的10个c进行初始化的,这个是一个直接的初始化方式,我们也可以使用等号的方式进行拷贝初始化,只不过这个需要写成两个步骤,第一步就是使用直接初始化创建一个临时对象,然后使用这个临时对象拷贝构造s8这个对象,这个只是为了说明两个初始化的方式是可以进行转化的;

1.3读取string对象内容

我们以这个输入“     hello   world     ”内容作为案例进行下面的讨论;

第一个情况:按照下面的这个代码进行输入输出,这个时候只会输出hello,没有其他的内容,这个和cin的读取方式有关,对于这个s对象,我们可以略过这个输入里面的空白字符(hello前面的字符)从第一个有效字符进行读取,读取到两个单词之间的这个空白处就会停止这个过程,所以打印的结果里面只有hello ;

第二个情况:这个时候同样是上面的输入内容,我们进行两个cin,第一个cin返回值就是一个对象,这个对象作为结果再次进行输入,因此这个打印结果就是helloworld,因为这个时候s1里面就是读取的hello ,s2里面就是读取的world,输出的时候就会直接输出,没有空格;

1.4一次读取多个未知对象

下面这个就是用来进行测试的情况,只要我们一直输入,这个程序就会一直等待我们执行,按下enter键之后,这个就会进行cout的输出操作,我们输入的这个空格,在输出的时候都会被当做换行进行看待,遇到异常情况才会退出(我是直接使用的ctrl+z终止这个循环过程)这个cin读取的时候,不会像下面的这个getline一样去读取这个\n,cin读取的时候这个\n留在缓冲区里面,我们输入这个ctrl+z之后,这个循环不成立,因此就会退出循环;

1.5使用getline读取一整行内容

首先需要注意的就是使用这个getline需要包含对应的头文件string,否则就会报错,这个和上面区别就是这个会一次性读入一行内容,打印的时候是直接输出一行的内容,而且是在一行上面显示,上面的cin是在不同的行上面显示的;

实际上这个getline进行读取的时候,会读取到这个换行符,但是这个对象里面不会存在这个换行符,因此我们需要手动的添加,如果刚开始输入的时候就是换行符,这个读取的就是空值;

我们输出的时候,使用的这个endl实际上作用就是进行换行,因为这个getline读取的对象没有读取换行符,这个交给endl来完成,此外这个endl还会对于这个缓冲区进行刷新flush(在我的linux博客里面有这个证明缓冲区存在的过程),因此这个endl的作用就是换行+刷新缓冲区;

1.6size()的返回值size_type类型

这个我们只需要知道,这个size_type可以存下这个string对象,而且这个是一个无符号的类型;

当我们使用这个size()函数的时候,就不要使用int类型的变量,否则容易出错,下面就是一个典型的错误案例:

这个还不是直接跟这个size()函数的返回值相关,但是可以说明这个问题,就是这个整型提升的问题,发生了类型的转换,下面的这个是在string某一个位置插入数据;

当我们的这个end=0的时候,再次进行--就是-1,但是因为这个pos是一个size_t类型的,因此这个end就需要进行转换,-1转换之后就是一个很大的正数,导致这个循环停不下来,这个就是int和unsigned同时存在的时候出现的问题;

1.7两个string对象比较

这个比较的话,就是分情况的,如果两个的这个长度相同,每一个字符对应都是一样的,这个时候我们就可以去说这两个string对象是一样的;

如果长度不相同,这个时候不看长度,而是比较第一个相异字符ASCII大小,第一个相异字符大的这个string对象就更大;

1.8string对象赋值

我们上面介绍拷贝构造的时候也说明了这个问题,我们使用一个对象去初始化一个已经存在的对象,就是赋值,初始化一个新的对象,就是拷贝构造

1.9两个string对象相加

两个string的相加很简单,就是一个字符串的拼接;

我们重点是看一下这个string和字符串字面值的相加:

这个进行判断的标准就是每一个+符号的两边至少有一个是我们的string对象,s4是满足这个条件的,s5里面的+两侧都是字符串字面值,所以这个写法是不对的;

s6相当于这个s1+","是符合的,产生一个临时的string对象,这个对象再和world进行加法,这个是符合相加的原则的;

但是这个s7计算的时候从左向右进行运算,hello +","就是不符合要求的,因为不可以把字面值直接相加;

一个简单的练习:

如果是把这个输入的字符串拼接,很简单:

直接进行这个string的加法即可,随着我们的输入,这个str2就会不断的累加起来;

如果是使用空格把我们的输入的内容进行拼接,就需要注意一下:

这个时候如果我们直接加上这个 “  ”,这个时候开头就会出现空格,这个是因为我们的str2刚开始就是空的,所以前面有空格,这个时候我们需要加入这个if语句进行设置一下即可,这个if只会在第一次size=0的时候才会有作用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073682.html

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

相关文章

策略产品 ①算法逻辑

目录 一、机器学习与AI的关系 二、机器学习全流程 1. 问题定义 2. 数据处理 3. 特征工程 4. 模型训练 5. 模型评估 6. 模型应用 机器学习是AI的关键技术之一,是指机器从历史数据中学习规律,从而提升系统某个性能度量的过程。这篇文章,我们在作…

C Primer Plus第十四章编程练习,仅供参考

第十四章编程练习 第一个问题让我们改写复习题5&#xff0c;创建一个函数去计算一年到某个月份的天数&#xff0c;在一个结构数组中去存储相关数据。完整程序代码以及运行结果如下&#xff1a; #include<stdio.h> #include<string.h> #include<ctype.h> st…

当外接硬盘接入到macOS上,只读不可写时,应当格式化

当windows磁盘格式例如 NTFS 的硬盘接入到macOS上时&#xff0c;会发现无法新建文件夹&#xff0c;无法删除、重命名。原因是磁盘格式对不上macOS&#xff0c;需要进行格式化。格式化时请注意备份重要数据。具体做法如下&#xff0c;在macOS中找到磁盘工具&#xff0c;然后对磁…

【HTML】常用几种模拟动画效果【附源代码】

1. 模拟音频波纹加载效果 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

计算机视觉编程

目录 灰色度 缩略图 拷贝粘贴区域 调整图像尺寸 旋转图像45 画图线、描点 灰色度 灰度是指图像中每个像素的亮度值&#xff0c;用来描述图像中各个像素的明暗程度。在计算机视觉中&#xff0c;灰度可以通过以下方式来计算&#xff1a; 1. 平均值法&#xff1a;将图像中每…

如何在程序中创建出多条线程

多线程是编程中的一个重要概念&#xff0c;它允许程序同时执行多个任务&#xff0c;每个任务可以看作是一个线程。在Java中&#xff0c;多线程尤为常见且强大&#xff0c;它通过允许程序在并发环境下运行&#xff0c;提高了程序的执行效率和响应速度。以下是对Java多线程的详细…

数学建模~~~预测方法--决策树模型

目录 0.直击重点 1.决策树概念 2.节点特征的选择算法 3.基尼系数的计算 4.决策树的分类 5.模型的搭建 6.模型的改进和评价 ROC曲线 参数调优 &#xfeff;GridSearch网格搜索 使用搜索结果重新建模 0.直击重点 这个文章&#xff0c;我们从三个维度进行说明介绍&#…

如何使用Python快速修改文件的标签(如何将歌词嵌入到音乐文件中,含歌词嵌入接口源码)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python与Music 📒📝 1. 初探音乐文件的标签📝 使用Python修改标签📝 将歌词嵌入音乐文件⚓️ 相关链接 ⚓️📖 介绍 📖 你是否曾经听过一首好听的歌曲,却发现它的标签信息(元数据信息)杂乱无章?甚至找不到歌词?…

【Remi Pi开发板镜像烧录】使用sd卡进行瑞米派镜像的烧录

烧录大典 按照《软件开发指南》4.2.1和4.2.2的顺序进行&#xff0c;具体烧录哪个镜像结合你自己的需求&#xff0c;每个镜像的区别参考以下链接 https://mbb.eet-china.com/forum/topic/143906_1_1.html Tera term界面全屏如下设置看着比较舒服 设置完之后setup->save-&g…

智能优化特征选择|基于鹦鹉优化(2024年新出优化算法)的特征选择(分类器选用的是KNN)研究Matlab程序 【优化算法可以替换成其他优化方法】

智能优化特征选择|基于鹦鹉优化&#xff08;2024年新出优化算法&#xff09;的特征选择&#xff08;分类器选用的是KNN&#xff09;研究Matlab程序 【优化算法可以替换成其他优化方法】 文章目录 一、PO基本原理PO基本原理基本流程示例应用 二、实验结果三、核心代码四、代码获…

npm pack使用

npm pack 的作用主要是从包中创建一个压缩文件&#xff08;tarball&#xff09;&#xff0c;通常具有.tgz扩展名&#xff0c;包含了打包的模块及其依赖&#xff0c;可用于分发或部署。其应用场景包括私有库或组件的分发、离线环境的依赖安装、CI/CD 自动化构建等。 在使用npm管…

UE管理内容 —— FBX Material Pipeline

目录 Material Support Multiple Materials Material Naming Material Ordering Texture Import FBX管道将应用于网格体&#xff08;静态网格体和骨架网格体&#xff09;的材质和纹理&#xff0c;从3D应用程序传输到虚幻&#xff1b; 要转换简单材质&#xff0c;可以导入源…

Gameplay Ability System(通过GameplayEffect里的Execution修改角色属性)

一、关于GameplayEffectExecutionCalculation类 1、查看GameplayEffectExecutionCalculation类的Execute函数 这个函数将编辑器里设置的参数传进来&#xff0c;然后通过计算再返回出去&#xff0c;这个函数被标记为BlueprintNativeEvent&#xff0c;所以我们可以在自己的类Pla…

python怎么去除换行符

在Python的编写过程中&#xff0c;获取到的字符串进场存在不明原因的换行和空格&#xff0c;如何整合成一个单句&#xff0c;成为问题。 方法&#xff1a; 一、去除空格 “ ”代表的为空格 "xyz".strip() # returns "xyz" "xyz".ls…

ES6 class小挑战

// 编码挑战 #2 /* 重新创建挑战 1&#xff0c;但这次使用 ES6 类&#xff1b; a. 添加一个名为 “speedUS ”的获取器&#xff0c;返回当前速度&#xff08;单位&#xff1a;mi/h&#xff09;&#xff08;除以 1.6&#xff09;&#xff1b; 3. a. 添加一个名为 “speedUS ”…

RM遥控键鼠控制总结

硬件&通信介绍 RM比赛中各个参赛队伍使用的都是大疆官方提供的遥控器套装&#xff0c;包括遥控器和接收机&#xff0c;接收机上共三个引脚&#xff1a;VCC&#xff0c;GND&#xff0c;DBUS&#xff08;数据通道&#xff09;&#xff0c;首次使用需要进行遥控器和接收机配对…

Bootstrap 滚动监听(Scrollspy)插件

滚动监听&#xff08;Scrollspy&#xff09;插件&#xff0c;即自动更新导航插件&#xff0c;会根据滚动条的位置自动更新对应的导航目标。其基本的实现是随着您的滚动&#xff0c;基于滚动条的位置向导航栏添加 .active class。 如果您想要单独引用该插件的功能&#xff0c;那…

快团团团长如何高质量选品?如何做最懂顾客的团长!

精准的用户画像&#xff0c;能够帮助团长个性化推荐&#xff0c;精细化营销&#xff0c;提升消费粘性&#xff0c;秒提下单率。 数据中心 用户画像 用户画像的核心&#xff0c;是为用户打标签。 将用户的每个具体信息抽象成标签&#xff0c;利用这些标签将用户具体化&#…

Docker数据卷使用手册

目录 目标 前言 概念 官方文档 匿名卷&#xff08;Anonymous Volumes&#xff09; 简介 案例 命名卷&#xff08;Named Volumes&#xff09; 简介 案例 目标 掌握Volume命令通过演示案例&#xff0c;理解数据卷种类与各自的用途。 前言 我们在很多网上教程上可以看到…

位数问题c++

题目描述 在所有的N位数中&#xff0c;有多少个数中有偶数个数字3&#xff0c;由于结果可能很大&#xff0c;你只需要输出这个答案对12345取余的值。 输入 读入一个数N(N≤1000) 输出 输出有多少个数中有偶数个数字3。 样例输入 2 样例输出 73样例解释&#xff1a; 1…