【C++杂货铺】string详解

目录

1. 基本概念:

1.1 本质:

1.2 string和char*区别:

1.3 特点:

2. 构造函数(初始化)

3. 赋值操作

4. 字符串拼接

5 查找 和 替换

6. 字符串比较

7. 字符存取

8. 插入和删除

​9. 子串获取


🌈前言🌈

        欢迎收看本期【C++杂货铺】,这期内容,我们将围绕C++的STL中string部分内容进行讲解,包含了接口使用等内容。

       下面除了会对string字符串的基本概念进行讲解,还有介绍其中的接口函数,当然你不需要去死记硬背,你只需要掌握其中1中即可。

📁 1. 基本概念:

📂 1.1 本质:

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

📂 1.2 string和char*区别:

        char* 是一个指针。

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

📂 1.3 特点:

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

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

        string管理char*所分配的空间,不用担心赋值越界和取值越界的问题,有类内部负责。

📁 2. 构造函数(初始化)

        接下来都是先展示一下函数原型,具体如何操作将展示在代码中,如果看不懂函数原型,不要紧,直接看代码展示即可,学会怎么使用才是关键。当然要不需要去背,使用多了,自然记住了,并且记住的就是那些经常被使用的重要的。

初始化:

1. string();        //创建一个空的字符串

2. string(const char* s);            //使用字符串s初始化

3. string(const sting& str);        //使用一个string对象初始化另一个string对象

4. string(int n ,char c);              //使用n个字符c初始化

	// 第一种方法 创建空字符串string s1;	//第二种    使用字符串s初始化string对象const char* s = "hello world";string s2(s);cout << s2 << endl;//第三种    使用一个string对象初始化另一string对象string s3(s2);cout << s3 << endl;//第四种    将string初始化为n个字符cstring s4(10, 'a');cout << s4 << endl;

        

📁 3. 赋值操作

赋值操作 : 给string字符串进行赋值
        一类:
            string& operator = (const char* s);
            string& operatot = (const string& s);
            sting&    operator = (char c);

        
        二类:

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

//一类://1.1string s1;s1 = "hello";cout << s1 << endl;//1.2string s2;s2 = s1;cout << s2 << endl;//1.3string s3;s3 = 'c';cout << s3 << endl;//二类://2.1string s4;s4.assign(s1);cout << s4 << endl;//2.2string s5;s5.assign("hello");cout << s5 << endl;//2.3string s6;s6.assign("hello", 3);cout << s6 << endl;//2.4string s7;s7.assign(5, 'h');cout << s7 << endl;

        其实初始化和赋值大部分都比较相似,熟悉了另一种就比较容易了。

        对于是否要全部掌握,= 和 assign函数,其实并不需要担心,目前你先只要熟练掌握其中一种就好了。

📁 4. 字符串拼接

拼接操作 :  实现在字符串末尾拼接字符串
        一类:
        string& operator += (const char* s);
        string& operator += (const char c);
        string& operator += (const string& str);

        
        二类:
        string& append(const char* s);
        string& append(const char* s,int n);
        string& append(const string& str);
        string& append(const string& str,int pos,int n);

//第一类://1.1string s1;s1 += "hello ";cout << s1 << endl;//1.2s1 += 'C';cout << s1 << endl;//1.3string s2 = " !";s1 += s2;cout << s1 << endl;//第二类://2.1string s3 = "hello  ";s3.append("world");cout << s3 << endl;//2.2s3.append(s2);cout << s3 << endl;//2.3 s3.append("and C++", 7);cout << s3 << endl;//2.4s3.append(s1, 0, 5);cout << s3 << endl;

📁 5 查找 和 替换

查找:查找指定字符串是否存在
        ——find 和 rfind的区别 :find从左往右查找,rfind从右往左查
        int find(const string& str,int pos);    查找str第一次出现的位置,从pos位置开始查找
        int find(const char* s,int pos);    查找s第一次出现的位置,从pos位置开始查找
        int find(const char* s,int pos,int n);    从pos位置查找s的前n个字符第一次位置
        int find(const char c,int pos);    查找字符c第一次出现的位置,从pos位置开始

替换:在指定的位置替换字符串
        string& replace(int pos,int n,const string& str);
        string& replace(int pos,int n,const char* s);

        这里我们并不会对所有的接口函数进行实现,只要把最常用的和一些需要注意的介绍一下,其他的留给你自己来实验。

        1. find查找字符或字符串:

        如果想从0位置开始,即pos=0,是可以省略的。

string str = "hello"
int pos1 = str.find("hel");
int pos2 = str.find('o');

        2. find从pos位置开始查找s的前n个字符出现的第一个位置

string str("hello string !");
int pos1 = str.find("strnig",0,3);
int pos2 = str.find("strnig",0,6);
cout<<pos1<<endl;
cout<<pos2<<endl;

        这里pos1为s的位置,而pos2为-1,因为str中没有strnig这个字符串,其中根本原因是n的不用,strnig这个字符串只有前3个字符出现在str中。

        3. replace替换字符串

string str1 = "hello world";
str1.replace(6,3,"C++");string str2 = "hello world";
str2.replace(6,5,"C++");

        这里替换就是将前n个元素替换成新的字符串,新的字符串不受n的影响,n只影响被替换的字符个数。当n=0时,在pos位置插入。

📁 6. 字符串比较

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

= 返回 0

> 返回 1

< 返回 -1

int compare(const string& str) ;

int compare(const char* s);

	string str1 = "hello";string str2 = "world";int com1 = str2.compare(str1);cout << com1 << endl;int com2 = str1.compare(str2);cout << com2 << endl;

📁 7. 字符存取

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

char& operator[](int n);        //通过[]防水取字符

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

string str = "hello";
str[0] = 'w';
cout << str << endl;
str.at(0) = 'h';
cout << str << endl;

📁 8. 插入和删除

插入:
string& insert(int pos,const char* s);        //插入字符串
string& insert(int pos,const string& str);        //插入字符串
string& insert(int pos,int n,char c);        //在指定位置插入n个字符c

删除:

string& erase(int pos,int n)           //删除从pos位置开始的n个字符

    string str1 = "hello ";str1.insert(6, "world");cout << str1 << endl;string str2 = " !";str2.insert(0, str1);cout << str2 << endl;string str3;str3.insert(0,3, 'a');cout << str3 << endl;str3.erase(0, 1);cout << str3 << endl;

📁 9. 子串获取

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

string substr(int pos,int n);        //返回由pos开始的n个字符组成的字符串

	string str = "abcdef";string substr = str.substr(1, 3);cout << "substr = " << substr << endl;


📁 总结

        以上,就是关于STL中string的所有内容,讲解了string的各个接口及使用方法等内容。

        如果感觉本期内容对你有所帮助,欢迎点赞,收藏,关注。Thanks♪(・ω・)ノ

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

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

相关文章

Rocky Linux网卡静态配置

一、开源系统 Rocky Linux 下载安装 1、安装教程 Rocky Linux 下载安装 二、远程工具 MobaXterm下载安装 1、安装教程 MobaXterm 下载安装 三、Rocky Linux 网卡配置 1、使用ip addr确认网卡名称&#xff08;此处可得知网卡为ens160&#xff09; [rootlocalhost ~]# ip a 1:…

【笔记】Helm-5 Chart模板指南-14 下一步

下一步 本指南旨在为chart开发者提供对如何使用Helm模板语言的强大理解能力。该模板聚焦于模板开发的技术层面。 但涉及到chart的实际日常开发时&#xff0c;很多内容本指南并没有覆盖到。这里有一些有用的文档链接帮助您创建新的chart&#xff1a; CNCF的 Artifact Hub 是ch…

23款奔驰GLE350升级小柏林音响 安装效果分享

小柏林之声音响是13个喇叭1个功放&#xff0c;功率是590W&#xff0c;对应普通音响来说&#xff0c;已经是上等了。像著名的哈曼卡顿音响&#xff0c;还是丹拿音响&#xff0c;或者是BOSE音响&#xff0c;论地位&#xff0c;论音质柏林之声也是名列前茅。星骏汇小许Xjh15863 升…

2.C语言——输入输出

1.字符输入输出函数 1.输入:getchar() 字面意思&#xff0c;接收单个字符&#xff0c;使用方法 char a; a getchar();实际上效果等同于char a; scanf("%c",&a);2.输出:putchar() 2.格式化输入输出函数 1.输入:scanf() 格式&#xff1a; scanf(“格式控制…

【SpringBoot5】SpringBoot如何找到我们写的类的

目录 1.Spring如何加载我们的类的 2.Spring注解驱动发展史与核心注解介绍 2.1 Spring驱动发展简史 2.2 @Configuration和@Bean注解 2.3 @Import以及相关注解 3.看看SpringBoot的启动的入口 3.1 @SpringBootConfiguration注解 3.2 @EnableAutoConfiguration注解 4.SpringBo…

Axes属性汇总

Axes属性很多&#xff0c;主要起控制坐标区的外观和行为的作用&#xff0c;共涉及十三类。 第1类&#xff1a;字体 Font Name——字体名称&#xff0c;默认为’Helvetica’。 要使用在任何区域设置中都有较好显示效果的等宽字体&#xff0c;请使用 “FixedWidth”。等宽字体依…

C语言KR圣经笔记 7.5文件访问 7.6错误处理-stderr和exit

7.5 文件访问 到目前为止&#xff0c;给出的例子都是读标准输入和写标准输出&#xff0c;而标准输入和输出都是由本地操作系统自动为程序定义的。 下一步是写个程序来访问还没有被连接到程序上的文件。我们以一个叫做 cat 的程序来说明这种操作需求&#xff0c;它连接一系列指…

系统测试计划(直接套用实际)

1测试目的 2测试范围 3资源要求 3.1人力资源 3.2指派干系人 3.3测试环境 3.4测试工具 4测试类型 5测试安排 5.1测试进度 5.2测试策略 5.2.1测试需求 5.2.2测试类型 6测试停止标准 7测试风险 8缺陷管理 8.1缺陷属性 8.2缺陷类型 8.3缺陷严重程度 8.4缺陷优先级 8.5缺陷状态 8.6缺…

【Java万花筒】跨越云平台的无服务器开发:使用Java构建弹性、高效的应用

无服务器计算平台的Java集成指南&#xff1a;AWS Lambda、Google Cloud Functions、腾讯云函数和IBM Cloud Functions 前言 无服务器计算平台提供了一种方便、弹性和成本效益高的方式来运行代码&#xff0c;而无需关心底层基础设施的管理。在这篇文章中&#xff0c;我们将探讨…

C#上位机与三菱PLC的通信07--使用第3方通讯库读写数据

1、通讯库介绍 mcprotocol 是一个基于 Node.js 的三菱 PLC MC 协议通信库&#xff0c;具有以下特点&#xff1a; 支持多种三菱 PLC MC 协议的设备&#xff0c;如 FX3U、Q03UDECPU、QJ71E71 等。 支持多种功能码和数据类型&#xff0c;如读取线圈&#xff08;M&#xff09;、…

[AIGC] 利用 chatgpt 深入理解 Java 虚拟机(JVM)

Java 虚拟机&#xff08;JVM&#xff09;是 Java 编程语言的核心运行环境&#xff0c;它负责解释和执行 Java 字节码。它是 Java 程序能够跨平台运行的关键&#xff0c;因为不同的操作系统和硬件平台都有自己的指令集和体系结构&#xff0c;而 JVM 则提供了一个统一的运行环境&…

C#面:列举ASP.NET页面之间传递值的几种方式

查询字符串&#xff08;Query String&#xff09;&#xff1a; 可以通过在URL中添加参数来传递值。 例如&#xff1a;http://example.com/page.aspx?id123 在接收页面中可以通过Request.QueryString[“id”]来获取传递的值。 会话状态&#xff08;Session State&#xff0…

com.google.android.material.tabs.TabLayout

一、布局 <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_parent"a…

P13 进制

进制本质&#xff0c;每一个数位上的数字乘上这一位的权重 再计算机中&#xff0c;数字均通过二进制补码表示 #include <bits/stdc.h> using namespace std; using ll long long; const int N 50; int a[N] ; int main() {string s "2021ABCD";for(int i…

LeetCode 每日一题 2024/2/12-2024/2/18

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 2/12 145. 二叉树的后序遍历2/13 987. 二叉树的垂序遍历2/14 102. 二叉树的层序遍历2/15 107. 二叉树的层序遍历 II2/16 103. 二叉树的锯齿形层序遍历2/17 429. N 叉树的层…

硬核!10分钟教你搭建一个本地版GPT4.0!

今天10分钟手把手教会你在自己电脑上搭建一个官方原版的GPT4.0。 不用ChatGPT账号&#xff0c;不用API&#xff0c;直接免费使用上官方原版的GPT4.0&#xff01; 对&#xff01;你没看错&#xff01;不仅是正版GPT4.0&#xff0c;还完全免费&#xff01; 而且整个部署流程极其简…

Pytorch的常用模块和用途说明

关注B站可以观看更多实战教学视频&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) Hi&#xff0c;兄弟们&#xff0c;这里是肆十二&#xff0c;今天我们来讨论一下深Pytorch中的常用模块。 PyTorch是一个开源的深度学习平台&#xff0c;提供了许多…

java根据前端所要格式返回树形3级层级数据

一、业务分析&#xff0c;根据前端需求返回如下数据格式 二、后端设计数据类型VO /*** author TTc* version 1.0* date 2024/2/15 16:47*/ Data AllArgsConstructor NoArgsConstructor public class Catalog2Vo {/*** 一级父分类的 id*/private String catalog1Id;/*** 三级子…

C# 12 中新增的八大功能你都知道吗?

一、主构造函数 在 Visual Studio 2022 版本 17.6 预览版 2 中引入。 从 C# 12 开始&#xff0c;可以在类和结构中声明主构造函数。主构造函数参数都在类的整个主体的范围内。为了确保显式分配所有主构造函数参数&#xff0c;所有显式声明的构造函数都必须使用 this() 语法调用…

SSL证书要钱吗?SSL证书一定要安装吗?

为了保护网站的数据安全和用户隐私&#xff0c;越来越多的网站开始采用SSL证书来加密数据传输。那么&#xff0c;SSL证书到底是否需要收费呢&#xff1f;又是否一定要安装呢&#xff1f;本文将从专业角度为您解答这些问题。 首先&#xff0c;我们来了解一下什么是SSL证书。SSL…