C++(12)——string

news2024/11/26 16:45:20

目录

1.insert: 

1.1  string& insert (size_t pos, const string& str):

1.2  string& insert (size_t pos, const char* s):

1.3  string& insert (size_t pos, const char* s, size_t n):

1.4  string& insert (size_t pos, size_t n, char c):

1.5  iterator insert (iterator p, char c):

2. erase:

2.1 string& erase (size_t pos = 0, size_t len = npos):

2.2 iterator erase (iterator p):

2.3 iterator erase (iterator first, iterator last):

3. find:

3.1 size_t find (const string& str, size_t pos = 0) const:

3.2 size_t find (const char* s, size_t pos = 0) const:

3.3 size_t find (const char* s, size_t pos, size_t n) const:

3.4 size_t find (char c, size_t pos = 0) const:

4. replace:

4.1 string& replace (size_t pos,  size_t len,  const string& str):


上篇文章中,介绍了string中一些函数的应用。本篇文章将介绍其他string中相关函数的应用。

1.insert: 

	
 string& insert (size_t pos, const string& str);

 string& insert (size_t pos, const char* s);

 string& insert (size_t pos, const char* s, size_t n);

 string& insert (size_t pos, size_t n, char c);

 iterator insert (iterator p, char c);

1.1  string& insert (size_t pos, const string& str):

对于本部分标题中的函数,其作用为在已有string类型的对象的第pos个位置插入另一个string类型的对象,具体方法如下:

int main()
{
	string s1("hello world");
	string s2("xxx");

	s1.insert(5, s2);
	cout << "插入后" << endl;
	cout << s1 << endl;
	
	return 0;
}

运行结果如下:

1.2  string& insert (size_t pos, const char* s):

对于本部分标题中的函数,其作用为在已有string类型的对象的第pos个位置插入一个常量字符串,具体使用方法如下:

string s1("hello world");

char a[] = { "aaaaaa" };
s1.insert(5, a);
cout << "插入后" << endl;
cout << s1 << endl;

运行结果如下:

1.3  string& insert (size_t pos, const char* s, size_t n):

对于本部分标题中的函数,其作用为在已有string类型的对象的第pos个位置插入另一个另一个常量字符串的前n个字符,具体使用方法如下:

string s1("hello world");
char a[] = { "aaaaaa" };
	
s1.insert(5, a, 1);
cout << "插入后" << endl;
cout << s1 << endl;

运行结果如下:

1.4  string& insert (size_t pos, size_t n, char c):

对于本部分标题中的函数,其作用为在已有string类型的对象的第pos个位置插入n个连续的字符。例如在一个string类型的对象的第5个位置插入两个连续的字符&:

string s1("hello world");

char a = '&';
	
s1.insert(5, 2,a);
cout << "插入后" << endl;
cout << s1 << endl;

运行结果如下:

此外,本函数经常用做在string类型对象中进行头插,例如:

string s1("hello world");
	
char a = '&';	
s1.insert(0,1,a);
cout << "插入后" << endl;
cout << s1 << endl;

运行结果如下:

1.5  iterator insert (iterator p, char c):

对于本部分标题中的函数,其作用为通过迭代器来向string类型的对象中插入字符,例如:

	string::iterator it = s1.begin();
	s1.insert(it, 'x');
	cout << "插入后" << endl;
	cout << s1 << endl;

	s1.insert(s1.begin(), 'c');
	cout << "插入后" << endl;
	cout << s1 << endl;

	s1.insert(it + 3, 's');
	cout << "插入后" << endl;
	cout << s1 << endl;
	

运行结果如下:

2. erase:

	
string& erase (size_t pos = 0, size_t len = npos);

iterator erase (iterator p);

iterator erase (iterator first, iterator last);

2.1 string& erase (size_t pos = 0, size_t len = npos):
 

对于函数erase,其功能是对已有的string类型的对象中的内容进行删除。对于本标题中的函数,其中的两个参数均有缺省值,对于第一个参数,即:

size_t pos = 0

意义为:如果不认为给定参数,则默认从对象的开头进行删除。

对于第二个参数,即:

size_t len = npos

其意义为:删除对象中内容的长度。如果不人为给定参数,则默认删除到npos,对于npos,是一个常数,大小为4294967295,在本部分可以理解为:如果没有给定参数,则直接删除对象中的所有内容。

对于不给参数调用erase,即:

int main()
{
	string s1("hello world");
	s1.erase();
	cout << s1 << endl;

	return 0;
}
运行结果为:

假如指定从对象的第5个字符,即下标为4开始删除一直到最后,即:

int main()
{
	/*void Test1();
	*/
	string s1("hello world");
	s1.erase(4);
	cout << s1 << endl;

	return 0;
}

运行结果为:


 假设指定从对象的第5个字符开始,删除到对象的第8个字符,即删除内容的长度为4

2.2 iterator erase (iterator p):

本部分标题给出的函数主要是让erase与迭代器进行结合,函数的参数只有一个,本函数的意义为:删除迭代器位置的字符。例如:

	string s1("hello world");
	s1.erase(s1.begin());
	cout << s1 << endl;

运行结果如下:

如果想删除对象中的第三个字符,也就是下标为2的位置的字符,即:


	string s1("hello world");
	s1.erase(s1.begin()+2);
	cout << s1 << endl;

 运行结果如下:

2.3 iterator erase (iterator first, iterator last):

对于本部分标题中的函数的参数与上一个函数相同,但是本函数是删除[first,last)这个区间的字符,例如:

string s1("hello world");

s1.erase(s1.begin()+2,s1.end()-2);
cout << s1 << endl;

运行结果如下:

3. find:

size_t find (const string& str, size_t pos = 0) const;
	
size_t find (const char* s, size_t pos = 0) const;
	
size_t find (const char* s, size_t pos, size_t n) const;

size_t find (char c, size_t pos = 0) const;

3.1 size_t find (const string& str, size_t pos = 0) const:

       对于本部分标题中的函数,其大致意义为:给定一个string类型的对象str,在已有的string类型的对象中去查找str,如果找到了,返回str在已有string类型的对象的下标,如果找不到则返回npos

      对于函数的第2个参数,如果不给定具体参数,则按照缺省参数从已有对象的值,从pos位置开始查找。具体使用如下:

int main()
{
	string s1("hello world");
	string s2("hello");
	string s3("world");

	size_t pos1 = s1.find(s2);
	size_t pos2 = s1.find(s3);
	cout << pos1 << endl;
	cout << pos2 << endl;

	return 0;
}

运行结果如下:

对于两个参数的使用,例如从下标为4的位置开始进行查找,即:

string s1("hello world");
string s3("world");
size_t pos3 = s1.find(s3, 4);
cout << pos3 << endl;

运行结果如下:

当不能查找到相应的内容时,例如:

	string s1("hello world");
	string s2("hello");
	
	size_t pos3 = s1.find(s2,6);
	cout << pos3 << endl;

 运行结果如下:

3.2 size_t find (const char* s, size_t pos = 0) const:

具体使用方法与3.1中相同,只是参数有改变,本部分只给出一个应用,其他不再进行叙述:
 


	char a1[] = "hello";
	size_t pos5 = s1.find(a1, 0);
	cout << pos5 << endl;

运行结果如下:

 

3.3 size_t find (const char* s, size_t pos, size_t n) const:

本标题中函数的大致意思为:在已有的string类型的第pos位置,查找字符串s的前n个字符,例如:

char a2[] = "helloyou";

	size_t pos6 = s1.find(a2, 0, 5);
	cout << pos6 << endl;

运行结果如下:

对于上面的字符串a2,如果是在已有的string类型的对象中寻找前6个字符,即在hello\,\, world中寻找helloy,即:

size_t pos6 = s1.find(a2, 0, 6);
	cout << "pos6" << ' ';
	cout << pos6 << endl;

运行结果为:

由于找不到匹配的内容,因此返回npos。 

3.4 size_t find (char c, size_t pos = 0) const:

本部分标题中函数的大致意义为:从已有的string类型的pos位置开始寻找一个字符c,如果不人为给定pos的值,则默认从开头进行查找,具体使用方法如下:

string s6("abcdefg");
	size_t pos7 = s6.find('a');
	size_t pos8 = s6.find('a', 1);
	cout << "pos7:" << pos7 << endl << "pos8:" << pos8 << endl;

运行结果如下:

4. replace:

	
string& replace (size_t pos,  size_t len,  const string& str);
string& replace (iterator i1, iterator i2, const string& str);
	
string& replace (size_t pos,  size_t len,  const string& str,
                 size_t subpos, size_t sublen);
	
string& replace (size_t pos,  size_t len,  const char* s);
string& replace (iterator i1, iterator i2, const char* s);

string& replace (size_t pos,  size_t len,  const char* s, size_t n);
string& replace (iterator i1, iterator i2, const char* s, size_t n);
	

由于replace的设计中,相似的部分过多,因此,文章只给出其中一个函数的使用

4.1 string& replace (size_t pos,  size_t len,  const string& str):

本部分标题函数的大致意义为:从已有string对象的pos位置开始,把相隔len个字符位置之内的内容,也就是[pos,len)替换成str

具体使用方法如下:

string s1("hello world");
string s2("xx");

s1.replace(0, 2, s2);
cout << s1 << endl;

运行结果如下:

对于不同的场景,可以结合上方的函数来解决不同的问题,例如:

"hello\, \, world\, \, hello\, \, everyone"中的空格全部替换为*

string s2("hello world hello everyone");
	size_t pos = s2.find(' ');
	while (pos != s2.npos)
	{
		s2.replace(pos,1, "*");
		pos = s2.find(' ');
	}
	cout << s2 << endl;

运行结果如下:

但是这种方法每次循环都要从头去找空格所在的位置,并且replace函数本身的作用原理就类似顺序表中的头插,效率过低,因此采用下面的方法:

string s4("hello world hello everyone");
	string s3;
	for (auto ch: s4)
	{
		if (ch == ' ')
		{
			s3 += '*';
		}
		else
		{
			s3 += ch;
		}
	}
	cout << s3 << endl;

运行结果如下:

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

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

相关文章

【c++】栈(satck)和队列(queue)

目录 一、stack 1.stack的介绍 2.stack的使用 3.stack的模拟实现 二、queue 1.queue的介绍 2.queue的使用 3.queue的模拟实现 三、priority_queue 1.priority_queue的介绍 2.priority_queue的使用 一、stack 1.stack的介绍 &#xff08;1&#xff09;stack是一种容…

Baichuan2百川模型部署的bug汇总

1.4bit的量化版本最好不要在Windows系统中运行&#xff0c;大概原因报错原因是bitsandbytes不支持window&#xff0c;bitsandbytes-windows目前仅支持8bit量化。 2. 报错原因是机器没有足够的内存和显存&#xff0c;offload_folder设置一个文件夹来保存那些离线加载到硬盘的权…

包含广告或宣传性质的内容或参考资料不对应,百度百科词条怎么改

想要修改百度百科词条&#xff0c;却发现在编辑百度百科词条时经常提示“包含广告或宣传性质的内容”&#xff0c;又或者经常遇到“参考资料不对应”的情况&#xff0c;我们该如何正确修改百度百科词条才能推广&#xff0c;洛希爱做百科网为大家分享。 修改百科百度百科词条提示…

基于SSM的校园闲置物品交易平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

nexus3 npm-hosted仓库迁移

迁移背景&#xff1a; 从nexus 3.33 升级到 nexus 3.64 过程中&#xff0c;私服 npm-hosted 无法上传。由于这个 npm-hosted 和 npm-proxy 放的同一个 blob存储&#xff0c;无法单独拆除去&#xff0c;所以采用迁移的方式 迁移思路&#xff1a; down下来 npm-hosted 仓库&am…

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

【征服redis8】Redis的AOF持久化

Redis 支持多种持久化方式来保证数据的可靠性和持久性。前面我们介绍了RDB方式。我们我们介绍第二种方式——AOF&#xff08;Append Only File&#xff09;机制是一种常用的持久化方式&#xff0c;它记录了所有对 Redis 数据库进行修改的命令&#xff0c;在 Redis 重启时可以使…

【Java】HttpServlet类中前后端交互三种方式(query string、form表单、JSON字符串)

在前后端的交互中&#xff0c;前端通过以下三种方式来与后端进行交互&#x1f31f; ✅query string ✅form表单 ✅JSON字符串 下面我们将书写这三种方式的后端代码并进行讲解 1、Query String QueryString即在url中写入键值对&#xff0c;一般用doGet方法进行交互 代码如下 …

读AI3.0笔记02_起源

1. 起源 1.1. 1955年&#xff0c;28岁的麦卡锡进入了达特茅斯学院的数学系 1.2. 该领域的正式确立可以追溯到1956年由一位名叫约翰麦卡锡的年轻数学家在达特茅斯学院举办的一场小型研讨会 1.2.1. 在1956年&#xff0c;即便是最先进的计算机&#xff0c;其速度也达不到现代智…

HarmonyOS —— buildMode 设置(对比 Android Build Varient)

前言 在安卓中 Build Variant 主要依赖模块&#xff08;module&#xff09;中 build.gradle 的 BuildType 和 ProductFlavor 提供的属性和方法&#xff0c;我们可以使用 Build Type 可以配置不同的构建方式、ProductFlavor 主要用来进行多渠道打包。 在鸿蒙中要做到同样像效果…

用CHAT分析高校体育智慧教学体系构建与探索研究现状

CHAT回复&#xff1a;现阶段&#xff0c;高校体育智慧教学体系的构建与探索研究还处于初级阶段&#xff0c;但全球数字化转型大潮的推动下&#xff0c;一些较为前沿的研究和实践已经开始出现&#xff1a; 1.教学平台的建设&#xff1a;很多高校已经开始尝试使用在线教育平台进行…

web蓝桥杯真题--9、水果拼盘

介绍 目前 CSS3 中新增的 Flex 弹性布局已经成为前端页面布局的首选方案&#xff0c;本题可以使用 Flex 属性快速完成布局。 准备 开始答题前&#xff0c;需要先打开本题的项目代码文件夹&#xff0c;目录结构如下&#xff1a; ├── css │ └── style.css ├── im…

【计算机图形学】习题课:Viewing

【计算机图形学】Viewing 部分问题与解答 CS100433 Computer Graphics Assignment 21 Proof the composed transformations defined in global coordinate frame is equivalent to the composed transformations defined in local coordinate frame but in different composing…

2024年腾讯云轻量服务器和CVM云服务器性能如何?

腾讯云轻量服务器和云服务器有什么区别&#xff1f;为什么轻量应用服务器价格便宜&#xff1f;是因为轻量服务器CPU内存性能比云服务器CVM性能差吗&#xff1f;轻量应用服务器适合中小企业或个人开发者搭建企业官网、博客论坛、微信小程序或开发测试环境&#xff0c;云服务器CV…

进阶Docker4:网桥模式、主机模式与自定义网络

目录 网络相关 子网掩码 网关 规则 docke网络配置 bridge模式 host模式 创建自定义网络(自定义IP) 网络相关 IP 子网掩码 网关 DNS 端口号 子网掩码 互联网是由许多小型网络构成的&#xff0c;每个网络上都有许多主机&#xff0c;这样便构成了一个有层次的结构。 IP 地…

新品发布 | 思腾合力深思系列「IW4235-4GRc」4U机架式高性能服务器

新品发布 | 思腾合力深思系列「IW4235-4GRc」4U机架式高性能服务器 Sitonholy 思腾合力 2024-01-17 17:35 发表于北京 采用第4/5代Intel Xeon 可扩展处理器 4U标准的机架式高性能服务器 极致性能提升 支持第4/5代Intel Xeon 可扩展处理器&#xff0c;CPU 3 UPI性能高达16 GT/s…

重置aws上的ssh默认登录端口

aws上的ec2机器&#xff0c;默认ssh的登录都是22&#xff0c;为了防止被黑&#xff0c;记录下修改该默认端口的方法 修改/etc/ssh/sshd_config文件,将Port 22注释去掉在上面的文件中&#xff0c;加入一行&#xff0c;你想要增加的端口号&#xff0c;格式和22一致注意&#xff1…

云原生场景下,AIGC 模型服务的工程挑战和应对

作者&#xff1a;徐之浩、车漾 “成本”、“性能”和 “效率”正在成为影响大模型生产和应用的三个核心因素&#xff0c;也是企业基础设施在面临生产、使用大模型时的全新挑战。AI 领域的快速发展不仅需要算法的突破&#xff0c;也需要工程的创新。 大模型推理对基础设施带来…

2024.1.18每日一题

LeetCode 2171.拿出最少数目的魔法豆 2171. 拿出最少数目的魔法豆 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定一个 正整数 数组 beans &#xff0c;其中每个整数表示一个袋子里装的魔法豆的数目。 请你从每个袋子中 拿出 一些豆子&#xff08;也可以 不拿出&a…

机器视觉系统在汽车车轮毂检测上的应用

将机器视觉用于轮毂检测&#xff0c;可以利用图像分析的方法来测量轮毂特征尺寸、判断轮毂形状&#xff0c;并获取其位置坐标等信息&#xff0c;从而能够辨识流水生产线上的各种款式和型号的汽车轮毂。 市面上对汽车车轮毂具体检测要求如下 &#xff1a; 1.为了分辨流水线上…