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 初学者指南。材料分为七…...

SpringBoot和Hibernate——如何提高数据库性能
摘要:本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在软件开发领域,性能是重中之重。无论您是构建小型 Web 应用程序还是大型企业系统…...

五分钟Win11安装安卓(Android)子系统
十分钟,完成win11安装安卓子系统 Step1、地区设置为美国 Wini 进入设置页面,选择时间和语言-语言和区域- 区域-美国 Step2 安装 Windows Subsystem for Android™ with Amazon Appstore 访问如下连接,install即可 安卓子系统 Step3 安…...

基于LSTM-Adaboost的电力负荷预测的MATLAB程序
微❤关注“电气仔推送”获得资料(专享优惠) 主要内容: LSTM-AdaBoost负荷预测模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。代码中的LST…...

GLTF纹理贴图工具让模型更逼真
1、如何制作逼真的三维模型? 要使三维模型看起来更加逼真,可以考虑以下几个方面: 高质量纹理:使用高分辨率的纹理贴图可以增强模型的细节和真实感。选择适合模型的高质量纹理图像,并确保纹理映射到模型上的UV坐标正确…...

HttpServletResponse对象
1.介绍 在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分,因此,在HttpServletResponse接口中定义…...

在SSL中进行交叉熵学习的步骤
在半监督学习(Semi-Supervised Learning,SSL)中进行交叉熵学习通常包括以下步骤: 准备标注数据和未标注数据 首先,你需要准备带有标签的标注数据和没有标签的未标注数据。标注数据通常是在任务中手动标记的ÿ…...

10月TIOBE榜Java跌出前三!要不我转回C#吧
前言 Java又要完了,又要没了,你没看错,10月编程语言榜单出炉,Java跌出前三,并且即将被C#超越,很多资深人士预测只需两个月,Java就会跌出前五。 看到这样的文章,作为一名Java工程师我…...

优盘中毒了怎么办?资料如何恢复
在现代社会中,优盘成为我们日常生活与工作中必备的便携式存储设备。然而,正是由于其便携性,优盘也成为病毒感染的主要目标之一。本篇文章将帮助读者了解如何应对优盘中毒的情况,以及如何恢复因病毒感染丢失的资料。 ▶优盘为什么…...

如何查看端口占用(windows,linux,mac)
如何查看端口占用,各平台 一、背景 如何查看端口占用?网上很多,但大多直接丢出命令,没有任何解释关于如何查看命令的输出 所谓 “查端口占用”,即查看某个端口是否被某个程序占用,如果有,被哪…...

Photoshop与Web技术完美融合,Web版Photoshop已正式登场
通过WebAssembly Emscripten、Web Components Lit、Service Workers Workbox以及对新的Web API的支持,Chrome和Adobe之间的合作使得将Photoshop桌面应用程序引入Web成为了一项重大的里程碑。现在,您可以在浏览器上使用高度复杂和图形密集的软件&#…...