stl String
构造函数
| 表达式 | 效果 |
| string s | 生成一个空的 string s |
| string s(str) | Copy 构造函数,创建一个 string str 的拷贝 |
| string s(rvStr) | Move 构造函数,创建一个 string 并将 rvStr 的内容搬移给 s |
| string s(str,stridx) | 将 string str 内“始于位置 stridx”的部分当作字符串 s 的初值 |
| string s(str,stridx,strlen) | 将 string str 内“始于位置 stridx 且长度最多 strlen”的部分当作字符串 s 的初值 |
| string s(cstr) | 以 C-string cstr 作为字符串 s 的初值 |
| string s(chars,charslen) | 以字符数组 chars 的前 charslen 个字符作为字符串 s 的初值 |
| string s(num,c) | 生成一个字符串,包含 num 个 c 字符 |
| string s(beg,end) | 以 [beg,end) 区间内的字符作为字符串 s 的初值 |
| string s(initlist) | 以 initlist 内的字符作为字符串 s 的初值 |
构造函数
| 表达式 | 效果 |
| s.~string() | 销毁所有字符,释放内存 |
String 和 C-String
'\0'在 string 之中不具有特殊意义,与其它字符的地位完全相同,但在 C-string 中标识结束
null pointer (NULL) 不可取代 nullptr 或 char * 参数,因为 NULL 具有整数类型
String —> 字符数组 / C-String
data()、c_str()
以字符数组的形式返回 string 内容,其结果是一个包含 '\0' 字符的有效 C-string
返回的字符数组由该 string 拥有,即调用者不可以改动它或释放其内存
返回值的有效期限在下次调用 non-const 成员函数时即告终止
copy()
将 string 内容复制到“调用者提供的字符数组”中,其末尾不添加 '\0' 字符
大小和容量
size()、length()
作用:返回 string 的现有字符数
PS:size() 和 length() 两个函数等效
empty() 检验字符数是否为 0,即字符串是否为空,比 size() 和 length() 更快,优先使用
max_size()
作用:返回 string 可存放的最大字符串的长度
capacity()
作用:返回 string 分配的存储容量
元素访问
访问方法:
- 下标操作符 [ ]
- 成员函数 at()
注意:
- Operator [ ] 不检查索引是否有效,at() 会检查。若调用 at() 时指定的索引无效,系统会抛出 out_of_range 异常。若调用 operator [ ] 时所指定的索引无效,其行为不明确,可能访问非法内存,因而引起某些边缘效应甚至崩溃
- 最末字符的更后面位置也有效,故当前实际字符数可被当成一个有效的索引
- front() 相当于 [0]
- 对于 at(),当前字符个数不是有效索引
- 对一个空 string 调用 back(),会导致不明确的行为
比较
操作数:string、C-string
<、<=、>、>=
比较依据:字典序
compare()
返回值:整数值,0 表示相等,小于 0 表示小于,大于 0 表示大于
更改内容
赋值
operator =
作用:对 string 赋予新值
新值:string、C-string、单一字符
成员函数 assign()
string a;
string b;
1.字符串直接赋值
a.assign(b);
a.assign("hyy");
2.一个字符串的子串赋值给另一个字符串
a.assign(b,begin,len);
从字符串 b 的第 begin 个字符开始向后 len 个字符(包括 begin)的字符串赋值给字符串 a
3.从字符串的某一个字符串开始到结束赋值给另一个字符串
a.assign(b,begin);
4.从字符串开始到字符串的某一个字符赋值给另一个字符串
a.assign("hyy",len);
5.用相同的 n 个字符给字符串赋值
a.assign(n,'c');
6.使用迭代器赋值
a.sssign(b.begin(),b.end());
交换
swap()
作用:交换两个 string 内容
令 string 为空
s = "" ;
s.clear();
s.erase();
安插
operator +=:将单一实参附加于 string 末尾
append():接受多个实参指明附加值
insert():需知道安插位置的索引,新字符将被安插于此位置之后;不接受“索引+单字符”的实参,必须传入一个 string 或加上一个额外数字
s.insert ( 0 , ' ' ) ; //ERROR
s.insert ( 0 , " " ) ; //OK
push_back():向 string 末尾添加字符
移除
erase()
pop_back():删除 string 最后一个字符
替换
replace()
改变字符数量
resize():若实参指出的大小比现有字符数少,末尾字符被移除;如实参指出的大小比现有字符数多,则以某个字符填充尾部,可以传入一个字符参数作为填充字符,否则以字符类型 default 构造函数建立填充字符
子串
substr():提取子串
合并字符串
operator +
I/O 操作符
operator >>:从 input stream 读取一个 string
operator >> 的执行方式:
1.若设立了 skipws flag,则跳过开头空格
2.持续读取所有字符,直到发生以下情形之一:
a.下个字符为空白字符
b.Stream 不再处于 good 状态
c.Stream 的 width() 结果大于 0,且目前已读出 width() 个字符
d.已读取 max_size() 个字符
3.Stream width() 被设为0
operator <<:把一个 string 写到 output stream
getline():读取所有字符,包括开头的空白字符,直到遭遇分行符或 end-of-file。分行符会被读取出来但不会不会被附加到结果上
搜索和查找

返回值:返回字符序列中“符合查找条件”的第一个字符的索引
参数:
- 第一个实参,被查找的对象
- 第二个实参,string 内查找的起点(索引),可有可无
- 第三个实参,欲查找的字符个数,即查找范围,查找长度,可有可无
数值转换

- 会跳过前导的任何空白字符
- 允许返回“被处理的 string 的最末字符”后的第一个字符的索引
- 若转换无法发生,抛出
std::invalid_argument;若被转换值超出返回类型可表达范围,抛出std::out_of_range - 对于整数,可以传递基数

迭代器
相关函数
包含 beg 但不包含 end,是半开区间,[beg,end)

相关文章:
stl String
构造函数 表达式 效果 string s 生成一个空的 string s string s(str) Copy 构造函数,创建一个 string str 的拷贝 string s(rvStr) Move 构造函数,创建一个 string 并将 rvStr 的内容搬移给 s string s(str,stridx) 将 string str 内“始于位置…...
java通过ffmpeg将wav音频文件转广播音频编码-G.711文件发送
1.直接将wav文件转g711 [ffmpeg.exe -i F:\\tt\\2.wav -f s16le -ar 8k -ac 1 -acodec pcm_s16le F:\\tt\\2pcm.g711] String cmdFfmpeg = "ffmpeg -i "+localUrl...
【Spring】Springmvc执行流程
介绍 SpringMVC是一种基于Spring实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC的架构模式思想,将Web层进行指责解耦,并管理应用所需的生命周期,为简化日常开发,提供了很大便利。 组件 组件Dispatche…...
游戏软件开发与应用软件开发有什么不同呢?
游戏软件开发和应用软件开发是两种不同类型的软件开发,它们在许多方面都有不同之处。以下是它们之间的一些主要区别: 目标用户群体: 游戏软件开发的主要目标是提供娱乐和休闲体验,通常面向广大的游戏玩家群体。游戏软件的设计和开…...
绥化市中心广场焕发新活力:OLED透明拼接屏的奇观展示
OLED透明拼接屏技术在绥化城市的应用引起了广泛关注。 绥化市位于中国东北地区,是黑龙江省的一个重要城市。 该市拥有悠久的历史,历经多个朝代的兴衰。绥化的历史背景赋予了这座城市独特的文化底蕴和魅力。 绥化市内有许多著名景点,其中最…...
JavaScript(CSS)动画引擎汇总
汇总记录前端实现动画相关的库 1、animejs animejs是一个轻量级的JavaScript动画库,具有简单但功能强大的API。 它适用于CSS属性,SVG,DOM属性和JavaScript对象。 官网anime.js • JavaScript animation engine anime.js - a Collection by…...
第九章-线程
初始时,CPU的执行流为进程;当产生了线程概念后,CPU执行流变为了线程,大大增大了一个周期以内进程的执行速度。 线程产生的作用就是为了提速,利用线程提速,原理就是实现多个执行流的伪并行,让处…...
UI设计师岗位的基本职责八篇
UI设计师岗位的基本职责1 职责: 1. 负责公司互联网产品app、web、h5等的用户界面设计工作; 2. 负责运营活动相关的平面及视频设计支持; 3. 负责完成产品相关的界面、图标、动画等的图形界面设计,并参与制定、编写产品视觉设计规范文档; 4. 整理和分…...
【了解一下,单例模式的实现方法--Java】
文章目录 单例模式的实现方法--Java1. 饿汉式单例模式(在类加载时创建实例):2. 懒汉式单例模式(在需要时创建实例,线程不安全):3. 静态内部类方式(懒加载,且线程安全&…...
C++实现enum反射,类似magic_enum,支持enum classes
C实现enum反射,类似magic_enum,支持enum classes 有一个 enum EnumTest { a 1, b, c };首先我们想实现 template <typename T, T N> std::string GetEnumName() {return __PRETTY_FUNCTION__; }这样打印 GetEnumName<EnumTest,static_cast…...
机器学习与模式识别作业----决策树属性划分计算
文章目录 1.决策树划分原理1.1.特征选择1--信息增益1.2.特征选择2--信息增益比1.3.特征选择3--基尼系数 2.决策树属性划分计算题2.1.信息增益计算2.2.1.属性1的信息增益计算2.2.2.属性2的信息增益计算2.2.3.属性信息增益比较 2.2.信息增益比计算2.3.基尼系数计算 1.决策树划分原…...
爬虫破解:解决CSRF-Token反爬问题 - 上海市发展和改革委员会
标题:爬虫破解:解决CSRF-Token反爬问题 - 上海市发展和改革委员会 网址:https://fgw.sh.gov.cn/fgw-interaction-front/biz/projectApproval/home MD5加密:ca7f5c978b1809d15a4b228198814253 需求文档 采集数据如下所示: 解决反爬思路 这里只提供解决思路,解决反爬,…...
网络代理技术的威力:保障安全、保护隐私
在如今高度互联的数字时代,网络代理技术正在崭露头角,为网络工程师和普通用户提供了保障网络安全和隐私的强大工具。本文将深入探讨Socks5代理、IP代理以及它们在网络安全、爬虫开发和HTTP协议中的关键作用。 1. Socks5代理:多功能的网络中继…...
【STM32 中断】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32中断 前言一、STM32的中断如何?如何管理这么复杂的中断?实际优先级如下怎么使用呢? 二、使用步骤1.引入库函数先分组,怎么…...
TensorFlow入门(十二、分布式训练)
1、按照并行方式来分 ①模型并行 假设我们有n张GPU,不同的GPU被输入相同的数据,运行同一个模型的不同部分。 在实际训练过程中,如果遇到模型非常庞大,一张GPU不够存储的情况,可以使用模型并行的分布式训练,把模型的不同部分交给不同的GPU负责。这种方式存在一定的弊端:①这种方…...
在React中,什么是props(属性)?如何向组件传递props?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...
java 每种设计模式的作用,与应用场景
文章目录 前言java 每种设计模式的作用,与应用场景 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差,实在白嫖的话࿰…...
Appium问题及解决:打开Appium可视化界面,点击搜索按钮,提示inspectormoved
打开Appium可视化界面,点击搜索按钮,提示inspectorMoved,那么如何解决这个问题呢? 搜索了之后发现,由于高版本Appium(从1.22.0开始)的服务和元素查看器分离,所以还需要下载Appium In…...
android 不同进程之间数据传递
1.handler android.os.Message是定义一个Messge包含必要的描述和属性数据,并且此对象可以被发送给android.os.Handler处理。属性字段:arg1、arg2、what、obj、replyTo等;其中arg1和arg2是用来存放整型数据的;what是用来保存消息标…...
一个完整的初学者指南Django-part1
源自:https://simpleisbetterthancomplex.com/series/2017/09/04/a-complete-beginners-guide-to-django-part-1.html 一个完整的初学者指南Django - 第1部分 介绍 今天我将开始一个关于 Django 基础知识的新系列教程。这是一个完整的 Django 初学者指南。材料分为七…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
