详解c++STL—string组件

目录

一、string基本概念

1、本质

2、string和char * 区别:

3、特点:

二、string构造函数

1、构造函数原型

2、示例

三、string赋值操作

1、赋值的函数原型

2、示例

四、string字符串拼接

1、函数原型

2、示例

五、string查找和替换

1、功能描述

2、函数原型

3、示例

六、string字符串比较

1、功能描述

2、比较方式

3、函数原型

4、示例

七、string字符存取

1、存取方式

2、示例

八、string插入和删除

1、函数原型

2、示例

九、string子串

1、函数原型

2、示例


一、string基本概念

1、本质

string是C++风格的字符串,而string本质上是一个

2、string和char * 区别:

1、char * 是一个指针

2、string是一个类内部封装了char*,管理这个字符串,是一个char*型的容器。

3、特点:

string 类内部封装了很多成员方法

例如:查找find,拷贝copy,删除delete 替换replace,插入insert

string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

二、string构造函数

1、构造函数原型

1、string();

//创建一个空的字符串 例如: string str;

2、string(const char* s);

//使用字符串s初始化

3、string(const string& str);

//使用一个string对象初始化另一个string对象

4、string(int n, char c);

//使用n个字符c初始化

2、示例

void test01() {
	string s;
	
	const char* str = "halouwa";
	string s1(str);
	cout << "s1="<<s1 << endl;

	string s2(s1);
	cout << "s2=" << s2 << endl;

	string s3(10, 'a');
	cout << "s3=" << s3<< endl;
}

int main() {
	test01();
	system("pause");
	return 0;
}

三、string赋值操作

功能描述:给string字符串进行赋值

1、赋值的函数原型

1、string& operator=(const char* s);

//char*类型字符串 赋值给当前的字符串

2、string& operator=(const string &s);

//把字符串s赋给当前的字符串

3、string& operator=(char c);

//字符赋值给当前的字符串

4、string& assign(const char *s);

//把字符串s赋给当前的字符串

5、string& assign(const char *s, int n);

//把字符串s的前n个字符赋给当前的字符串

6、string& assign(const string &s);

//把字符串s赋给当前字符串

7、string& assign(int n, char c);

//用n个字符c赋给当前字符串

2、示例

void test01() {
	string s1;
	const char* s = "hello s1";
	s1 = s;
	cout << "s1 = " << s1 << endl;

	string s2;
	s2 = s1;
	cout << "s2 = " << s2 << endl;

	string s3;
	char c = 'c';
	s3 = c;
	cout << "s3 = " << s3 << endl;

	string s4;
	s4.assign("hello s4");
	cout << "s4 = " << s4 << endl;

	string s5;
	s5.assign("hello s4",5);
	cout << "s5 = " << s5 << endl;

	string s6;
	s6.assign(s5);
	cout << "s6 = " << s6 << endl;

	string s7;
	s7.assign(10,'w');
	cout << "s7 = " << s7 << endl;



}

int main() {
	test01();

	system("pause");
	return 0;
}

总结:

string的赋值方式有很多,​​operator=​​ 这种方式最常用

四、string字符串拼接

功能描述:

实现在字符串末尾拼接字符串

1、函数原型

1、string& operator+=(const char* str);

//重载+=操作符

2、string& operator+=(const char c);

//重载+=操作符

3、string& operator+=(const string& str);

//重载+=操作符

4、string& append(const char *s);

//把字符串s连接到当前字符串结尾

5、string& append(const char *s, int n);

//把字符串s的前n个字符连接到当前字符串结尾

6、string& append(const string &s);

//同operator+=(const string& str)

7、string& append(const string &s, int pos, int n);

//字符串s中从pos开始的n个字符连接到字符串结尾

2、示例

//字符串拼接
void test01() {
	string s1 = "我";
	s1 += "爱学习";
	cout << "s1 = " << s1 << endl;

	s1 += ':';
	cout << "s1 = " << s1 << endl;

	string s = "c++";
	s1 += s;
	cout << "s1 = " << s1 << endl;

	string s2;
	s2.append("I ");
	cout << "s2 = " << s2 << endl;

	s2.append("like you",5);
	cout << "s2 = " << s2 << endl;

	string s3 = "study ";
	s2.append(s3);
	cout << "s2 = " << s2 << endl;

	string s4 = "python c++";
	s2.append(s4,7,3);
	cout << "s2 = " << s2 << endl;

}

int main() {
	test01();
	system("pause");
}

五、string查找和替换

1、功能描述

查找:查找指定字符串是否存在

替换:在指定的位置替换字符串

2、函数原型

1、int find(const string& str, int pos = 0) const;

//查找str第一次出现位置,从pos开始查找

2、int find(const char* s, int pos = 0) const;

//查找s第一次出现位置,从pos开始查找

3、int find(const char* s, int pos, int n) const;

//从pos位置查找s的前n个字符第一次位置

4、int find(const char c, int pos = 0) const;

//查找字符c第一次出现位置

5、int rfind(const string& str, int pos = npos) const;

//查找str最后一次位置,从pos开始查找

6、int rfind(const char* s, int pos = npos) const;

//查找s最后一次出现位置,从pos开始查找

7、int rfind(const char* s, int pos, int n) const;

//从pos查找s的前n个字符最后一次位置

8、int rfind(const char c, int pos = 0) const;

//查找字符c最后一次出现位置

9、string& replace(int pos, int n, const string& str);

//替换从pos开始n个字符为字符串str

10、string& replace(int pos, int n,const char* s);

//替换从pos开始的n个字符为字符串s

3、示例

//字符串的查找和替换
//1、查找
void test01() {
	string str = "asdfggghhhjj";
	//找到,返回索引,未找到,返回-1
	int pos = str.find("gg");
	cout << pos << endl;

	//find,从左往右找,rfind,从右往左找
	pos = str.rfind("gg");
	cout << pos << endl;

}

//2、替换
void test02() {
	string str1 = "qwertyuiop";
	//将第2个字符开始的后0个字符,替换成”1111“
	str1.replace(2,0,"1111");

	cout << str1 << endl;

}

int main() {
	test01();
	test02();
}

总结:

1、find查找是从左往右,rfind从右往左

2、find找到,返回查找的第一个字符位置,未找到返回-1

3、replace在替换时,需要指定从那个位置起多少个字符替换成什么样的字符串

六、string字符串比较

1、功能描述

字符串之间的比较

2、比较方式

字符串比较是按字符的ASCII码进行对比

= 返回 0

> 返回 1

< 返回 -1

3、函数原型

1、int compare(const string &s) const;

//与字符串s比较

2、int compare(const char *s) const;

//与字符串s比较

4、示例

//字符串比较
void test01() {
	string str1 = "hello";
	string str2 = "hello";

	
	if (str1.compare(str2) == 0) {
		cout << "相等" << endl;
	}
	else if (str1.compare(str2) == 1) {
		cout << "str1 > str2" << endl;
	}
	else if (str1.compare(str2) == -1) {
		cout << "str1 > str2" << endl;
	}
	else
		cout << "错误" << endl;
}

int main() {
	test01();
}

总结:

字符串对比主要是用于比较两个字符串是否相等,判断谁大谁小的意义并不是很大

七、string字符存取

1、存取方式

string中单个字符存取方式有两种

1、​​char& operator[](int n); ​​ //通过[]方式取字符

2、​​char& at(int n); ​​ //通过at方法获取字符

2、示例

//字符串单个字符的存取
void test1() {

	string str = "hello";
	cout << "str = " << str << endl;

	//访问
	for (int i = 0; str[i] != '\0';i++) {

		cout<<str[i] << " ";
	}
	cout << endl;

	for (int i = 0; i<str.size();i++) {

		cout << str.at(i) << " ";
	}
	cout << endl;

	//修改
	str[0] = 'x';
	cout << "str = " << str << endl;

	str.at(1) = 'x';
	cout << "str = " << str << endl;
	
}

int main() {
	test1();

	system("pause");
	return 0;
}

八、string插入和删除

功能描述:

对string字符串进行插入和删除字符操作

1、函数原型

1、string& insert(int pos, const char* s);

//插入字符串

2、string& insert(int pos, const string& str);

//插入字符串

3、string& insert(int pos, int n, char c);

//在指定位置插入n个字符c

4、string& erase(int pos, int n = npos);

//删除从Pos开始的n个字符

2、示例

//字符串的插入和删除

void test1() {

	string str = "algorithm";
	cout << "str = " << str << endl;

	//插入
	str.insert(1,"xxx");
	cout << "str = " << str << endl;

	//删除
	str.erase(1,3);
	cout << "str = " << str << endl;
}

int main() {
	test1();
	system("pause");
}

九、string子串

功能描述:

从字符串中获取想要的子串

1、函数原型

1、string substr(int pos = 0, int n = npos) const;

//返回由pos开始的n个字符组成的字符串

2、示例

void test1() {
	string str = "lisi@qq.com";
	cout << "str =" << str << endl;

	string sub = str.substr(0,4);
	cout << "substr =" << sub << endl;

}


int main() {
	test1();
	system("pause");
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023系统分析师---软件工程、系统规划高频错题

系统规划---成本效益分析 评价信息系统经济效益常用的方法主要有成本效益分析法,投入产出分析法和价值工程方法。盈亏平衡法常用于销售定价; 可行性分析 系统规划是信息系统生命周期的第一个阶段,其任务是对企业的环境、目标以及现有系统的状况进行初步调查,根据企业目标…

【利用AI让知识体系化】万字深入浅出Nginx

思维导图 文章目录 思维导图 第一部分&#xff1a;入门篇1.1 起步下载和安装Nginx启动NginxNginx配置文件Nginx命令行总结 1.2 Nginx的基本架构1.3 安装和配置Nginx1.4 Nginx的基本操作 第二部分&#xff1a;核心篇2.1 Nginx的请求处理2.2 Nginx的缓存机制2.3 Nginx的负载均衡机…

题解校验码—CRC循环校验码与海明校验码

码距 一个编码系统的码距是任意两个码字的最小距离。 例如个编码系统采用三位长度的二进制编码&#xff0c;若该系统有四种编码分别为&#xff1a;000&#xff0c;011&#xff0c;100&#xff0c;111&#xff0c;此编码系统中000与111的码距为3&#xff1b;011与000的码距为2…

Hard Patches Mining for Masked Image Modeling

摘要 蒙面图像建模&#xff08;MIM&#xff09;因其在学习可伸缩视觉表示方面的潜力而引起了广泛的研究关注。在典型的方法中&#xff0c;模型通常侧重于预测掩码补丁的特定内容&#xff0c;并且它们的性能与预定义的掩码策略高度相关。直观地说&#xff0c;这个过程可以被看作…

WiFi(Wireless Fidelity)基础(九)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

【GAMES101】作业2学习总结

本系列博客为记录笔者在学习GAMES101课程时遇到的问题与思考。 GAMES101&#xff1a;课程官网GAMES101&#xff1a;B站视频GAMES101&#xff1a;相关文件下载(百度网盘) 一、基础题 本次作业的目的是为了让我们熟悉三角形栅格化的相关操作&#xff0c;通过Assignment2.pdf可以…

白嫖chatgpt的Edge插件,很难不爱啊

目录 &#x1f341;1.常见的Edge浏览器界面 &#x1f341;二.安装WebTab插件 &#x1f341;三.WebTab插件的各种功能 &#x1f341;1.支持免费的chatgpt&#xff0c;不限次数​编辑 &#x1f341;2.有几个休闲的小游戏可以玩耍&#xff0c;点击即玩。 &#x1f341;3.支…

618前夕,淘宝天猫大变革,探索电商天花板之上的价值

2023年淘宝天猫618商家大会&#xff0c;恰逢淘宝20周年&#xff0c;也是阿里“16N”组织架构改革&#xff0c;淘宝天猫“独立”经营后&#xff0c;管理和运营团队的首次亮相。除了淘宝天猫618的具体策略&#xff0c;最受关注的&#xff0c;还有淘宝天猫的大变革——涉及淘宝天猫…

AD9680+JESD204B接口+FPGA FMC高速率数据采集板卡

板卡概述&#xff1a; 【FMC_XM155】 FMC_XM155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。 该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用…

CN学术期刊《西部素质教育》简介及投稿邮箱

《西部素质教育》&#xff08;半月刊&#xff09;创刊于2015年&#xff0c;是由青海人民出版社有限责任公司主管/主办的教育类学术期刊&#xff0c;本刊恪守“追踪教育研究前沿&#xff0c;关注教育实践热点&#xff0c;探索创新教育理念&#xff0c;传播教育教学信息&#xff…

Linux相关问题

中英文切换 super空格切换中英文&#xff1b;super指键盘上的Win键&#xff1b; 开机自启动服务设置 可视化方式&#xff1a;输入setup命令进入自启动服务配置&#xff1b;通过上下键选中服务&#xff0c;通过空格选择是否自启动该服务&#xff1b; 开启不同的终端 CTRLALT…

audioop.rms函数解读和代码例子

该audioop模块包含对声音片段的一些有用操作。它对由8,16或32位宽的有符号整数样本组成的声音片段进行操作&#xff0c;并以Python字符串存储。这与al和sunaudiodev模块使用的格式相同。所有标量项都是整数&#xff0c;除非另有规定。 audioop.rms 即 sqrt(sum(S_i^2)/n) 这个公…

10个你从未想过的 ChatGPT 有趣用途

这篇文章向我们展示了ChatGPT的有趣用途&#xff0c;如创作独特的故事、写作协助、模拟对话和游戏等。这些应用展示了ChatGPT的强大功能和灵活性。通过这些有趣的例子&#xff0c;我们可以看到ChatGPT作为一种人工智能技术在生活中的实际应用和潜力。无论是娱乐还是实用&#x…

我和C++的故事---第一次见面.

&#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f3e0;学习社区&#xff1a;夏目友人帐. 文章目录 前言一、第一个C程序二、C 关键字(C98)三、命名空间1、命名空间的定义2、命名空间的使用3、命名空间的三种展开方式 四、C输入&&输出&&换行1、…

三极管的几点应用

三极管有三个工作状态&#xff1a;截止、放大、饱和&#xff0c;放大状态很有学问也很复杂&#xff0c;多用于集成芯片&#xff0c;比如运放&#xff0c;现在不讨论。其实&#xff0c;对信号的放大&#xff0c;我们通常用运放处理&#xff0c;三极管更多的是当做一个开关管来使…

蚁群算法ACS处理旅行商问题TSP【Java实现】

1. 介绍 蚁群算法是一种群体智能算法&#xff0c;模拟了蚂蚁寻找食物时的行为&#xff0c;通过蚂蚁之间的信息交流和合作&#xff0c;最终实现全局最优解的寻找【是否找得到和迭代次数有关】。 蚁群算法的基本思想是将搜索空间看作一个由节点组成的图&#xff0c;每个节点代表…

【软件开发】Memcached(理论篇)

Memcached&#xff08;理论篇&#xff09; 1.Memcached 简介 Memcached 是一个开源的&#xff0c;支持高性能&#xff0c;高并发的分布式内存缓存系统&#xff0c;由 C 语言编写&#xff0c;总共 2000 多行代码。从软件名称上看&#xff0c;前 3 个字符 Mem 就是内存的意思&am…

港科夜闻|香港科大与香港科大(广州)管理层联席会议顺利召开

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)管理层联席会议顺利召开。这是自内地和香港全面恢复通关以来&#xff0c;两校的高级管理团队首次举行线下的联席会议&#xff0c;面对面交流、讨论有关两校协同发展的重要议题。两校持续深入推进…

「——全部文章专栏汇总——」

欢迎来到我的博客 天喜Studio 在这里&#xff0c;我会分享我在 c语言、操作系统、计算机网络等方面的学习和经验&#xff0c;希望能对读者有所帮助。以下是我写的所有专栏 如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 如有疑问欢迎大家指正讨论…

SQL注入(一)联合查询 报错注入

目录 1.sql注入漏洞是什么 2.联合查询&#xff1a; 2.1注入思想 2.2 了解information_schema 数据库及表 3.可替代information_schema的表 3.1 sys库中重要的表 4. 无列名注入 利用 join-using 注列名。 4. 报错注入 4.1 常用函数&#xff1a;updatexml、extractvalue…