详解c++STL—string组件

news2024/11/25 12:30:46

目录

一、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");
}

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

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

相关文章

tomcat目录结构

tomcat服务器安装根目录下有很多子目录&#xff0c;这些目录的作用是&#xff1a; (1)bin&#xff1a;存放了tomcat服务器中的可执行的批处理文件(startup.bat shutdown.bat) (2)conf&#xff1a;存放了tomcat相关的配置文件(其中的server.xml是tomcat服务器核心配置文件) …

26. Pandas处理分析网站原始访问日志

Pandas处理分析网站原始访问日志 目标&#xff1a;真实项目的实战&#xff0c;探索Pandas的数据处理与分析 实例&#xff1a; 数据来源&#xff1a;我自己的wordpress博客蚂蚁学Python – 你有没有为写代码拼过命&#xff1f;那你知不知道 人生苦短&#xff0c;我用Python&am…

Python挑选出无Labelme标注文件的图片文件

Python挑选出无Labelme标注文件的图片文件 前言前提条件相关介绍实验环境Python挑选出无Labelme标注文件的图片文件代码实现输出结果 前言 本文是个人使用Python处理文件的电子笔记&#xff0c;由于水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。 (https://blog.…

【设计原则与思想:总结课】38 | 总结回顾面向对象、设计原则、编程规范、重构技巧等知识点

到今天为止&#xff0c;设计原则和思想已经全部讲完了&#xff0c;其中包括&#xff1a;面向对象、设计原则、规范与重构三个模块的内容。除此之外&#xff0c;我们还学习了贯穿整个专栏的代码质量评判标准。专栏的进度已经接近一半&#xff0c;马上就要进入设计模式内容的学习…

Python: 生成ubuntu apt镜像地址

文章目录 1. 目的2. 设计3. 实现4. 调用5. 参考 1. 目的 每次新配置 Ubuntu 系统&#xff0c;免不了配置 apt 源。尽管可以通过 GUI 界面进行选择&#xff0c;但自动化程度不够&#xff0c;不同桌面&#xff08;Unity/Gnome/KDE&#xff09;下的界面也不太一样&#xff1b; 使…

Java基础-sleep和wait的区别

本文介绍Java中sleep和wait方法的使用区别 文章目录 sleep()wait()sleep()和wait()对比区别相同点 sleep() 查看sleep方法&#xff0c;可见其是static native方法 public static native void sleep(long millis) throws InterruptedException;sleep()方法需要指定等待的时间。…

HTTP第14讲——HTTP传输大文件的方法

背景 HTTP 可以传输很多种类的数据&#xff0c;不仅是文本&#xff0c;也能传输图片、音频和视频。 早期互联网上传输的基本上都是只有几 K 大小的文本和小图片&#xff0c;现在的情况则大有不同。网页里包含的信息实在是太多了&#xff0c;随随便便一个主页 HTML 就有可能上百…

java常用集合

java集合又是一个新世界了&#xff0c;从前在我刚接触java的时候&#xff0c;一直在纠结 集合这东西到底有啥用&#xff0c;后来代码写的多了。才开始学习集合 集合也叫容器。顾名思意 就是存放对象的器皿。 主要是由两大接口派生而来 &#xff1a;一个是 Collecton接口&#…

LeetCode高频算法刷题记录2

文章目录 1. 最大子数组和【简单】1.1 题目描述1.2 解题思路1.3 代码实现 2. 合并两个有序链表【简单】2.1 题目描述2.2 解题思路2.3 代码实现 3. 两数之和【简单】3.1 题目描述3.2 解题思路3.3 代码实现 4. 二叉树的层序遍历【中等】4.1 题目描述4.2 解题思路4.3 代码实现 5. …

代码随想录算法训练营第四十二天 | 背包问题

背包问题 理论 基础&#xff1a;二维 文档讲解&#xff1a;代码随想录 (programmercarl.com) 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩…

Revit SDK:ErrorHandling

前言 本文介绍 Revit 的错误处理机制。 内容 程序员对错误处理的定义和理解 程序的错误处理机制可以分为两种类型&#xff1a;错误返回码和异常捕捉。 错误返回码是指在程序中遇到错误时&#xff0c;通过函数返回值来表明错误的类型和信息。错误返回码可以在程序中被预测和…

MySQL数据落盘原理(data page、redo log、undo log、binlog、xa-2pc等源码分析)

文章目录 前言一、Innodb如何作为MySQL插件的二、page cleaner thread三、Update操作源码梳理1、生成undo log2、更新数据3、生成redo log 四、MTR与将脏页添加到Flush List1、MTR2、脏页添加到Flush List 五、事务提交1、xa-prepare2、xa-commit2.1、process_flush_stage_queu…

概率统计与计算机技术的联系及在生活当中的应用研究

title: 概率统计与计算机技术的联系及在生活当中的应用研究 date: 2023-05-16 11:42:26 tags: 题目&#xff1a;概率统计与计算机技术的联系及在生活当中的应用研究 摘 要 概率论与数理统计是研究随机现象统计规律性的一门学科&#xff0c;是理工科各专业的一门重要的基础课程…

shell免交互

shell免交互 Here Document 免交互 使用I/O重定向的方式将命令列表提供给交互式程序或命令&#xff0c;比如 ftp、cat 或 read 命令。 是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地生产出一个“文件”并用作“命令”的…

Python 爬虫(四):Selenium 框架

Selenium 是一个用于测试 Web 应用程序的框架&#xff0c;该框架测试直接在浏览器中运行&#xff0c;就像真实用户操作一样。它支持多种平台&#xff1a;Windows、Linux、Mac&#xff0c;支持多种语言&#xff1a;Python、Perl、PHP、C# 等&#xff0c;支持多种浏览器&#xff…

Android中的IPC方式

Android中的IPC方式 1.Bundle 其中Intent就是用Bundle进行传播 四大组件间的进程间通信 2.使用文件共享 2.1文件共享的缺点 无并发&#xff0c;适用于交换简单的数据实时性不高的情景 使用文件共享容易出&#xff1a; 内容不一致&#xff1a;如果多个线程同时写入文件&…

【JavaWeb】-- Request和Response、JSP、会话技术

文章目录 Request和Response1.概述2.Request对象2.1 Request继承体系2.2Request获取请求数据2.3 IDEA创建Servlet2.4 请求参数中文乱码问题POST请求解决方案GET请求解决方案 2.5 Request请求转发 3.Response对象3.1 Response设置响应数据功能介绍3.2 Response请求重定向3.3 路径…

RabbitMQ养成记 (8. 消费者接受消息可靠性 consumer Ack)

Consumer Ack ack 指的是acknowledge 确认&#xff0c; 指的是消费端收到消息后的确认方式。 有三种确认方式&#xff1a; 自动确认手动确认 &#xff08;根据业务情况 手动确认是否成功发送&#xff09;根据异常情况确认 我们在消费端用代码实践一下&#xff1a; 首先我们定…

不会还有人不知道软件测试报告模板怎么写吧?

在测试岗位上&#xff0c;写报告是一项非常重要的软技能&#xff0c;写得好可以加分&#xff0c;写不好必然减分。 但在测试岗位上&#xff0c;提测“通过”和提测“不通过"的软件测试报告所包含的内容是不一样的&#xff08;这是个坑&#xff09;。但很多测试新人可能并…

LIO-SAM UBUNTU16.04.7 ROS-KINETIC 环境 编译 安装

简单记录一下 VMWARE workstation15UBUNTU16.04.7ros-kineticgtsam4.0.0 &#xff08;默认16.04比较老旧&#xff0c;不好用&#xff0c;vmtools也都没有&#xff0c;选了一个.7&#xff09; 选16.04版本的理由也简单&#xff0c;只是为了参考一个博客&#xff0c;单独建的环…