揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器

目录
🚀0.前言
🚈1.string 构造函数
🚝1.1string构造函数
🚝1.2string拷贝构造函数
🚈2.string类的使用
🚝2.1.查询元素个数或空间
返回字符串中有效字符的个数:size lenth
返回字符串目前所占的空间:capacity
检验有效字符个数是否为零:empty
🚝2.2对字符串容量操作
为字符串预留空间:reserve
将有效字符的个数该成n个,多出的空间用字符c填充:resize
清空有效字符:clear
🚝2.3string类对象的访问及遍历操作
2.3.1 [ ]访问
2.3.2迭代器
2.3.3反向迭代器
🚈3.增删查改等
🚝3.1增
在字符串后尾插字符c:push_back
在字符串后追加一个字符串:append
在字符串后追加字符串str(真香):operator+=
编辑 插入:insert
🚝3.2删
在字符串后尾删除字符:pop_back
在某处删除:erase
🚝3.3查
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置:find
从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置:rfind
🚝3.4改
🚈4.其他
返回C格式字符串:c_str
在str中从pos位置开始,截取n个字符,然后将其返回:substr
编辑
编辑获取一行字符串:getline
💎7.结束语
🚀0.前言
言C++之言,聊C++之识,以C++会友,共向远方。各位博友的各位你们好啊,这里是持续分享C++知识的小赵同学,今天要分享的C++知识是string ,在这一章,小赵将会向大家聊聊C++的string知识 。✊
🚈1.string 构造函数
🚝1.1string构造函数

我们通过查阅网站得到string构造函数如上,我们主要使用的构造函数是下面这几个
string str1;//空字符串
cout << str1 << endl;
string str2("i love you");//直接传入字符串构造
cout << str2 << endl;
string str3(str2.begin(), str2.end());//利用迭代器去构造
cout << str3;
这三种构造方式都是相当不错的。这里我们可以通过底层看看string内部是如何去构造的;

我们通过查看它的底层发现它好像就是一个动态数组,那么我们能不能这么用呢?当然是可以的。

那么这个可以说是非常爽的了。
🚝1.2string拷贝构造函数
这个我们用起来应该是相当熟悉了。
🚈2.string类的使用
🚝2.1.查询元素个数或空间
返回字符串中有效字符的个数:size lenth
string str1("1024");cout << str1.size() << endl;//返回有效字符个数cout << str1.length() << endl;//返回有效字符个数
返回字符串目前所占的空间:capacity
cout << str1.capacity();//返回字符串目前所占的空间;

为什么这里的空间和有效字符不一样呢?主要因为其实就和我们之前队列一样,str在最开始的时候也进行了开空间操作,而当里面的字符快要填满时会进行扩容操作。(这个在实现string时候我们还会讲)
检验有效字符个数是否为零:empty

需要注意的是这里指的是有效字符个数而不是所占空间
🚝2.2对字符串容量操作
为字符串预留空间:reserve

string s;cout << s.capacity() << endl;s.reserve(20);//告诉扩容函数我要放20个字符,你的不够用了,就快点扩容cout << s.capacity() << endl;

当然如果你输入的值小于当前空间一般是不会进行扩容的 。
将有效字符的个数该成n个,多出的空间用字符c填充:resize

string s;s.resize(10);//将有效字符的个数该成10个,多出的空间用字符'\0'填充cout << s << endl;s.resize(20, 'a');//将有效字符的个数该成20个,多出的空间用字符'a'填充cout << s<<endl;

这个函数其实内部也有开空间的函数(可能就是reverse),所以当你的字符大于目前的空间时候会给你扩容,然后填上。
resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字 符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大 小,如果是将元素个数减少,底层空间总大小不变。
清空有效字符:clear
s.clear();//清空有效字符
cout << s.size();

需要注意的是这里只清理字符,不会缩减空间。
🚝2.3string类对象的访问及遍历操作
2.3.1 [ ]访问
这个访问方式也是我们前面试过的,和数组一样就很爽。

2.3.2迭代器
迭代器这里,我们可以当成指针一样先用着,等到实现的时候,我们就会知道里面是什么了。
string::iterator it = s.begin();//这里要指定谁的迭代器while (it != s.end()){cout << *it;it++;}
2.3.3反向迭代器
方向迭代器与正向迭代器相反。rbegin对应的就是end.

🚈3.增删查改等
🚝3.1增
在字符串后尾插字符c:push_back

string s;s.push_back('a');//在结尾添加字符'a'cout << s;

在字符串后追加一个字符串:append

虽然它的实现很多但是我们一般用的也就只有第一个也就是我圈红的那个。
string s("hello");s.append(" 1024");cout << s << endl;

在字符串后追加字符串str(真香):operator+=
这个是真香重载了+=使用非常爽。

string s("hello ");s += "1024";cout << s<<endl;s += ' i';cout << s << endl;
插入:insert
插入我们也是非常熟悉了,以前就有

我个人主要用的就是这一个,给位置插入;(其他的大家可以自己尝试去探索下)
s.insert(0, "你好");cout << s << endl;

🚝3.2删
在字符串后尾删除字符:pop_back
s.pop_back();//删除尾部字符cout << s << endl;

在某处删除:erase

这里我们也主要用第一个
s.erase(0, 5);//从0位置开始删5个字符cout << s << endl;

🚝3.3查
从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置:find
string s("abbba");size_t a=s.find("bb", 2);//从2位置开始向后找cout << a << endl;size_t b=s.find('a');//用缺省参数,即从0位置开始向后找cout << b<<endl;size_t c = s.find('a',3);cout << c;

从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置:rfind

npos即默认最后一个字符位置
string s("abbba");size_t b=s.rfind('a');//默认从最后一个位置向前找cout << b << endl;size_t c = s.rfind('a',2);//从2位置向前找cout << c << endl;

🚝3.4改
其实改的话很简单就用我们之前的【】就行了,很香。

🚈4.其他
返回C格式字符串:c_str


在str中从pos位置开始,截取n个字符,然后将其返回:substr
string a = s.substr(2, 3);//从2位置开始拷贝3个字符,组成字符串返回cout << a<<endl;cout << s;
获取一行字符串:getline
这个还是比较重要的,比如我们要读取的字符串中有空格就可以用这个。


大家可以先像我这样用着,这里的输入流参数(istream)到后面我们会说。
💎7.结束语
好了小赵今天的分享就到这里了,如果大家有什么不明白的地方可以在小赵的下方留言哦,同时如果小赵的博客中有什么地方不对也希望得到大家的指点,谢谢各位家人们的支持。你们的支持是小赵创作的动力,加油。

如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持小赵,如有不足还请指点,方便小赵及时改正,感谢大家支持!!!

相关文章:
揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器
目录 🚀0.前言 🚈1.string 构造函数 🚝1.1string构造函数 🚝1.2string拷贝构造函数 🚈2.string类的使用 🚝2.1.查询元素个数或空间 返回字符串中有效字符的个数:size lenth 返回字符串目…...
用人工智能,应该怎么掏钱?
人工智能(AI)服务的发展正快速改变企业和开发者的工作方式,不仅提供了强大的数据分析和预测能力,还涵盖了从自然语言处理到图像识别的广泛功能。然而,理解AI服务的支付模式对成本控制和合理资源分配至关重要࿰…...
【Axure高保真原型】移动案例
今天和大家分享多个常用的移动案例的原型模板,包括轮盘滑动控制元件移动、页面按钮控制元件移动、鼠标单击控制元件移动、元件跟随鼠标移动、鼠标拖动控制元件移动、键盘方向键控制元件移动,具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原…...
Bytebase 3.0.0 - AI 助手全面升级
🚀 新功能 SQL 编辑器里的 AI 助手:支持将自然语言转换成 SQL 语句,解释 SQL 代码,还能帮助发现潜在问题。 支持 SQL Server DML 语句一键回滚。支持 MariaDB 的在线大表变更。新的 SQL 审核规则: 要求为 MySQL 设置 …...
php基础:数据类型、常量、字符串
语法补充: 每句必须以;结尾 echo:能输出一个以上的字符串,英文逗号隔开 print:只能输出一个字符串并返回1 1.数据类型 php可以自动识别数据类型。 php有5种数据类型:String(字符串…...
Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制
Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制 在当今互联网快速发展的时代,内容创作成为了网站运营、社交媒体管理和个人博客维护不可或缺的一部分。然而,高质量内容的创作往往耗时耗力,特别是对于需要频…...
el-table在某些条件下禁止选中
el-table在某些条件下禁止选中 废话不多说直接上代码 HTML部分 <el-table v-loading"loading" :data"wmsShipmentOrderList" ref"multipleTable" select"handleSelect" selection-change"handleSelectionChange">&…...
深入探讨 HTTP 请求方法:GET、POST、PUT、DELETE 的实用指南
文章目录 引言GET 方法POST 方法PUT 方法DELETE 方法小结适用场景与特点总结最佳实践 在 API 设计中的重要性 引言 HTTP 协议的背景:介绍 HTTP(超文本传输协议)作为互联网的基础协议,自 1991 年发布以来,成为客户端和…...
深度学习:元学习(Meta-Learning)详解
元学习(Meta-Learning)详解 元学习,也称为“学会学习”,是机器学习中的一个重要子领域,旨在开发能够快速适应新任务或环境的模型,即使这些任务的可用数据非常有限。元学习的核心思想是通过经验学习如何学习…...
uniapp展示本地pdf + 自定义标题
概要 本文主要讲述uniapp打包的Android项目如何展示本地的PDF文件,并设置标题 需求分析 1、因为是打包的Android项目展示本地的PDF文件,首先需要拿到这个本地的PDF文件路径 2、如何在uniapp的vue页面中展示PDF,因为没有直接展示PDF文件的…...
国标GB28181设备管理软件EasyGBS国标GB28181-2016平台更换SQLite数据库的步骤
在当今数字化、智能化的时代,视频监控系统已成为各行各业不可或缺的一部分。国标GB28181设备管理软件EasyGBS,作为一款功能强大的国标视频云服务平台,凭借其广泛的应用场景和卓越的性能,在智慧城市、智慧园区、智慧交通、智慧医疗…...
C++基础与实用技巧第三节:内存管理与性能优化
第二章:C基础与实用技巧 第三节:内存管理与性能优化 1. 动态内存的管理策略与技巧 动态内存管理是C编程的核心部分之一,合理管理内存可以极大提高程序的性能和稳定性。在C中,动态内存的分配和释放通常使用new和delete运算符&am…...
【移动应用开发】界面设计(二)实现水果列表页面
续上一篇博客 【移动应用开发】界面设计(一)实现登录页面-CSDN博客 目录 一、采用ViewBinding实现一个RecyclerView 1.1 在app/build.gradle中添加recyclerview依赖,并打开viewBinding (1)在app/build.gradle中添加…...
基于Multisim的四人智力竞赛抢答器设计与仿真
1)设计任务 设计一台可供 4 名选手参加比赛的智力竞赛抢答器。 用数字显示抢答倒计时间,由“9”倒计到“0”时,无人抢答,蜂鸣器连续响 1 秒。选手抢答时,数码显示选手组号,同时蜂鸣器响 1 秒,倒…...
前端学习---(4)js基础-2
事件: 事件的三要素:事件源、事件、事件驱动程序。 事件处理步骤: (1)获取事件源:document.getElementById(“box”); // 类似于Android里面的findViewById (2)绑定事件: 事件源box.事件onclick…...
重生之“我打数据结构,真的假的?”--3.栈和队列(无习题)
栈和队列 C语言中的栈和队列总结 在C语言中,**栈(Stack)和队列(Queue)**是两种非常重要的数据结构。它们广泛用于各种应用中,比如内存管理、任务调度、表达式求值等。本文将对这两种数据结构进行详细的介…...
《Python游戏编程入门》注-第2章2
《Python游戏编程入门》的“2.2.5 绘制线条”中提到了通过pygame库绘制线条的方法。 1 相关函数介绍 通过pygame.draw模块中的line()函数来绘制线条,该函数的格式如下所示。 line(surface, color, start_pos, end_pos, width1) -> Rect 其中,第一…...
PoissonRecon学习笔记
1. Screened Poisson Reconstruction (SPR) 源码:https://github.com/mkazhdan/PoissonRecon However, as noted by several researchers, it suffers from a tendency to over-smooth the data. 泊松重建存在过度平滑的现象。 方法:position and gradi…...
腾讯云DBA面试(一面)
摘要:腾讯云前端时间约了个了维护工程师的面试,总结下面试题。 1、oracle索引原理和mysql索引原理的区别,性能差异?b tree 和 b+ tree 区别。 (1) B+树改进了B树, 让非叶子结点只作索引使用, 去掉了其中指向data record的指针, 使得每个结点中能够存放更多的key, 因此能有更…...
Python:背景知识及环境安装
一、计算机的基础概念 1.1 什么是计算机? 最早我们有计算器,但是他只能完成算数运算的功能 而计算机能完成的工作有: (1)算术运算 (2)逻辑判断 (3)数据存储 (…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

