string类的使用(上)

目录

1.string类的概念

2.string的构造函数(实现初始化)

3.对string类容量获取和操作

4.string类对象的访问和遍历

4.1operator[]

4.2begin和end

4.3 rbegin 和 rend 

4.4迭代器分类

4.5范围for(自动实现++遍历)

5.string类对对象的修改和查找

5.1operator+=

5.2c_str

5.3npos和find 

 5.4 rfind

5.5substr

5.6 insert和erase

6.其他函数:

6.1operator+

6.2getline

6.3relational operator


1.string类的概念

上面是c++官方对string类的描述,我们不难发现string类的底层其实是:basic_string模版以char类型实例化出的结果。它实际上是以可动态增长的数组提供存储,并提供许多接口,实现多字符串的多种操作。 

2.string的构造函数(实现初始化)

string类提供了多种构造函数。但我们在实际中多用到的是 默认构造函数,拷贝构造函数,以字符串构造函数。 

string st1;//默认构造(重要
string st2("abcd");//带参构造(重要
string st3(st2);//拷贝构造(重要
string st4(st2, 2, 2);//子字符串构造(了解
string st5(st2, 3);//顺序构造(了解
string st6(4, 48);//填充构造(了解
string st7(st2.begin(), st2.begin() + 3);//范围构造(了解

3.对string类容量获取和操作

其中的size和length是同样的效果,capacity是返回空间容量, empty是判空.

clear是清空字符串(但是capacity不会变,只是size = 0)

reserve是申请改变容量(只有当n>capacity时,才会申请成功),当n<=capacity时都没有变化

resize:将字符串大小调整为 n 个字符的长度。如果 n 小于当前字符串长度,则当前值将缩短为其前 n 个字符,并删除第 n个字符以外的字符。如果 n 大于当前字符串长度,则通过在末尾插入所需数量的字符来扩展当前内容,以达到 n 的大小。如果指定了 c,则新元素将初始化为 c 的副本,否则,它们是值初始化字符(空字符)

4.string类对象的访问和遍历

4.1operator[]

string类已经完成了对[]的重载,我们用 name[pos]即可访问pos位置的字符

4.2begin和end

begin和end的返回参数需要用迭代器来接收,在string类里,迭代器(string::iterator)就像指针一样,但它不一定是指针。begin返回的首字符的指针,end返回的是末尾字符的后一个字符的指针。

我们用迭代器实现以下string的遍历

	string::iterator it = s1.begin();while (it != s1.end()){cout << *it << " ";++it;}

4.3 rbegin 和 rend 

rbegin rend 与begin end类似,只不过他们的指向位置不同,正向方向不同

实现反向遍历

string s1("hello claus");
string::reverse_iterator it = s1.rbegin();
while (it != s1.rend())
{cout << *it << " ";++it;
}

4.4迭代器分类

4.5范围for(自动实现++遍历)

string s1("cada");
for (auto i : s1)
{cout << i << " ";
}

5.string类对对象的修改和查找

5.1operator+=

operator+= 可以实现push_back(在string后加单字符)和append(是string后加字符串)的功能

5.2c_str

将string对象转换为c语言中的const char*格式,以便使用strcpy等针对字符串的函数 

我们可以在这里区分下输出字符串和string的区别:

 cout字符串的逻辑是输出到字符串的末尾\0,而cout<<string是把string类的所有输出,不管有没有\0.

5.3npos和find 

npos是属于string类中的静态变量,使用string::npos,其代表的是size_t类型的-1,也就是size_t

的正向最大值。

find(char c,size_t pos = 0)是从pos位置找字符c或者字符串s出现的位置,如果找到就返回其位置出,找不到就返回npos。 其还有许多如下用法

 5.4 rfind

rfind是从pos位置向前找字符c或者字符串s,返回位置,如果没找到就返回npos,其他用法如下

5.5substr

从string中的pos位置开始,截取n个字符,返回值

 5.6例:分离URL中的协议,域名和资源名称

void trennen_url(const string& url)
{size_t pos1 = url.find(':');if (pos1 != string::npos){cout << url.substr(0, pos1) << endl;}size_t pos2 = pos1 + 3;size_t pos3 = url.find('/', pos2);if (pos3 != string::npos){cout << url.substr(pos2, pos3 - pos2) << endl;cout << url.substr(pos3 + 1);}
}

5.6 insert和erase

insert是向pos位置插入某个字符串或者string,所有用法如下(如果用迭代器是只能插入单字符且是正向)

erase 是从pos位置,删除n个长度

6.其他函数:

6.1operator+

operator+和operator+=的区别是前面的不会改变string,而后面的会改变string,但是他们的输出都是相同的。

6.2getline

当输入的string有space时,用scanf或者cin只能获取一部分,因为这两种遇到space或者换行就会停止输入,而getline只有换行时停止输入。一般的用法是getline(cin,str);其中cin是输入流

6.3relational operator

string还提供了互相比较大小的方法,其与c语言中的字符串比较大小相似,不做过多描述

扩展阅读:

ascii是一种值和字符的映射关系,0-255个值映射了许多字符。ascii是1个字符为一个编码

utf8和window gbk 是值和中文的映射关系。UTF-8使用1~4字节为每个字符编码,gabk为2字节为一个字符编码

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

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

相关文章

http请求过程 part-2

http请求过程 http应用层 实体 实体分为实体首部和实体主体&#xff0c;实体首部是用来描述主体的 实体部分是可选的&#xff0c;它被用来运送请求或者响应的数据 传输层-TCP HTTP连接是建立在TCP连接的基础上 以流形式通过一条已经打开的TCP连接&#xff0c;按顺序进行…

next 从入门到精通

next 从入门到精通 相关链接 演示地址 演示地址 源码地址 源码地址 获取更多 获取更多 hello 大家好&#xff0c;我是 数擎科技&#xff0c;今天来跟大家聊聊 Next.js 如果你遇到任何问题&#xff0c;欢迎联系我 m-xiaozhicloud 什么是 Next.js Next.js 是一个基于 Reac…

27 C 语言标准库 <stdio.h> 中的两个字符串函数:sprintf、sscanf,不同编码方式的中文字符长度

目录 1 sprintf 1.1 函数原型 1.2 功能说明 1.3 案例演示 1.4 注意事项 2 sscanf 2.1 函数原型 2.2 功能说明 2.3 案例演示 2.4 使用 %s 解析字符串的易错点 2.4.1 空白符问题 2.4.2 顺序问题 2.4.3 中文字符长度问题 2.5 注意事项 1 sprintf 1.1 函数原型 spri…

求恰好为k 的区间数量(滑动窗口进阶版)

前言&#xff1a;之前做的滑动窗口都是可以直接一遍过&#xff0c;然后每次右边确定了以后&#xff0c;左边不断缩小寻找最优解 但是这个题目呢我们不仅要保证我们的辅音字母的个数恰好为k&#xff0c;其他元音字母的个数只要每个都出现了就行&#xff0c;这个就导致我们不能用…

【IEEE PDF eXpress】格式不对

目录 一、问题二、解决方法 一、问题 word的文档&#xff0c;用IEEE PDF eXpress网站生成pdf后&#xff0c;提交论文出现错误&#xff1a; Document validation failed due to the following errors: Content exceeds IEEE template margins for its format (Page 1:Bottom).…

Java_TestNg

TestNg 前言支持特性 使用步骤1.引入库 常用注解Test注解BeforeSuite AfterSuiteAfterClass BeforeClassAfterTest BeforeTestAfterGroups BeforeGroupsBeforeMethod AfterMethodDataProviderFactoryListenersPatameters断言相等 不相等true/falsenull / !nullequals / !equals…

Leetcode 887. 鸡蛋掉落

1.题目基本信息 1.1.题目描述 给你 k 枚相同的鸡蛋&#xff0c;并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。 已知存在楼层 f &#xff0c;满足 0 < f < n &#xff0c;任何从 高于 f 的楼层落下的鸡蛋都会碎&#xff0c;从 f 楼层或比它低的楼层落下的鸡蛋都…

AIGC时代,大模型微调如何发挥最大作用?

人工智能的快速发展推动了大模型的广泛应用&#xff0c;它们在语言、视觉、语音等领域的应用效果已经越来越好。但是&#xff0c;训练一个大模型需要巨大的计算资源和时间&#xff0c;为了减少这种资源的浪费&#xff0c;微调已经成为一种流行的技术。微调是指在预训练模型的基…

DVWA | File Inclusion(文件包含)渗透测试

概念&#xff1a; 漏洞产生原因&#xff1a; 主要是由于开发人员没有对用户输入的文件路径进行严格的过滤和验证。例如&#xff0c;如果一个 Web 应用程序接受用户输入的文件路径&#xff0c;然后使用这个路径进行文件包含&#xff0c;而没有对用户输入进行任何检查&#xff0c…

【笔记】数据结构12

文章目录 2013年408应用题41方法一方法二 看到的社区的一个知识总结&#xff0c;这里记录一下。 知识点汇总 2013年408应用题41 解决方法&#xff1a; 方法一 &#xff08;1&#xff09;算法思想 算法的策略是从前向后扫描数组元素&#xff0c;标记出一个可能成为主元素的元…

【YOLO目标检测二维码数据集】共3112张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;3112 标注数量(txt文件个数)&#xff1a;3112 标注类别数&#xff1a;1 标注类别名称&#xff1a;qrcode 数据集下载&#xff1a;二维码数据集 图片示例 数据集图片&#xff1a; 数据集…

yolov8/9/10模型在垃圾分类检测中的应用【代码+数据集+python环境+GUI系统】

yolov8/9/10模型在垃圾分类检测中的应用【代码数据集python环境GUI系统】 yolov8/9/10模型在垃圾分类检测中的应用【代码数据集python环境GUI系统】 背景意义 随着计算机视觉技术和深度学习算法的快速发展&#xff0c;图像识别、对象检测、图像分割等技术在各个领域得到了广泛…

C++类和对象(下) 初始化列表 、static成员、友元、内部类等等

1.再探构造函数 之前使用构造函数时都是在函数体内初始化成员变量&#xff0c;还有一种构造函数的用法&#xff0c;叫做初始化列表&#xff1b;那么怎么使用呢&#xff1f; 使用方法用冒号开始(" : ")要写多个就用逗号(" , ")隔开数据成队列每个成员变量后…

谷歌收录批量查询,如何批量查询谷歌收录以及提交网站进行收录的方法

在SEO优化过程中&#xff0c;了解并监控网站在谷歌搜索引擎中的收录情况至关重要。本文将详细介绍如何批量查询谷歌收录以及提交网站进行收录的方法&#xff0c;帮助网站管理员和SEO专家更有效地管理和优化网站。 一、谷歌收录批量查询方法 1.使用搜索引擎的site指令 …

前端考核总结

目录 JavaScript的基本数据类型有哪些&#xff1f;JavaScript中数据类型的检测方法JavaScript如何判断对象中的属性存在自身还是原型链上flex布局HTML5新标签Vue的基本概念Vue生命周期JavaScript中闭包的基本概念防抖节流双等号与三等号的区别显式转换 JavaScript的基本数据类型…

fastadmin搜索刷新列表,怎么限制用户频繁点击?

文章目录 fastadmin搜索刷新列表&#xff0c;怎么限制用户频繁点击&#xff1f;解决方案fastadmin事件方法实现完结 fastadmin搜索刷新列表&#xff0c;怎么限制用户频繁点击&#xff1f; fastadmin目前有个很致命的问题&#xff0c;就是用户可以频繁的点击搜索等按钮&#xf…

Qt --- 界面优化 --- QSS和绘图API

界面优化 》美化 一个程序的界面是否好看&#xff0c;是否重要呢。 有些面向专业领域的程序&#xff0c;界面好看与否&#xff0c;不是看关键&#xff0c;更关键的是实际的效果。有些面向普通用户领域的程序&#xff0c;界面好看&#xff0c;还是很大的加分项。 界面优化 Qt…

奖金高达 110 万元,Spatial Joy 2024 全球 AR 应用开发大赛启动

今年是AR应用开发大赛第三届&#xff0c;恰逢Rokid成立十周年&#xff0c;我们推出全新的大赛品牌“Spatial Joy”&#xff0c;引领开发者享受开发乐趣&#xff0c;为其打造充满挑战和惊喜的开发之旅&#xff0c;逐渐成为空间计算时代全球最大AR应用开发大赛。回顾大赛发展&…

PCB敷铜敷不了相同网络的线怎么办?

图片上的情况就是今天需要讲的内容&#xff0c;可以看出出来的线头是GND,敷的铜也是GND但是相同网络就是不能连在一起。 解释&#xff1a; 这是因为我们敷铜的时候属性选的是连接相同的net,如图所示&#xff1a; 解决办法&#xff1a; 只需要设置改为相同的Object就可以了&…

STM32+ADC+扫描模式

1 ADC简介 1 ADC(模拟到数字量的桥梁) 2 DAC(数字量到模拟的桥梁)&#xff0c;例如&#xff1a;PWM&#xff08;只有完全导通和断开的状态&#xff0c;无功率损耗的状态&#xff09; DAC主要用于波形生成&#xff08;信号发生器和音频解码器&#xff09; 3 模拟看门狗自动监…