【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.hqwc.cn/news/475444.html

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

相关文章

JRT监听-PDF-Excel-Img

依赖全新设计&#xff0c;我们无需再顾虑历史兼容性的束缚&#xff1b;同时&#xff0c;基于多年来累积的深入需求理解&#xff0c;JRT监听机制巧妙地借助CMD命令模式&#xff0c;达成了监听的全面统一。无论是PDF、Excel还是图片文件&#xff0c;都不再需要特殊对待或额外区分…

[计算机网络]深度学习传输层TCP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;深度学习传输层TCP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 [计算机网络]深度学习传输层TCP协议 前提概括一: TCP协议段格式二:确认应答三:超时重传四:…

JS进阶——垃圾回收机制以及算法

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

MySQL系列之索引入门(下)

前言 通过上文&#xff0c;我想各位盆友已熟悉MySQL的索引分类及其含义&#xff0c;那么如何合理的使用呢&#xff1f; 请继续围观此文&#xff0c;一探究竟&#xff01; 一、创建索引 首先&#xff0c;我们一起学习索引是如何创建的&#xff0c;又有哪些方式。 1. create t…

P3817 小A的糖果题解

题目 小A有n个糖果盒&#xff0c;第i个盒中有颗糖果。 小A每次可以从其中一盒糖果中吃掉一颗&#xff0c;他想知道&#xff0c;要让任意两个相邻的盒子中糖的个数之和都不大于x&#xff0c;至少得吃掉几颗糖。 输入输出格式 输入格式 输入的第一行是两个用空格隔开的整数&…

VQ23 请按城市对客户进行排序,如果城市为空,则按国家排序(order by和case when的连用)

代码 select * from customers_info order by (case when city is null then country else city end)知识点 order by和case when的连用

流程编排(LogicFlow)

简介&#xff1a; LogicFlow 是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制&#xff0c;方便我们快速在业务系统内满足类流程图的需求。 vue litefolw实现 liteflow-logicflow-vue实现 特性&#xff1a;…

找图片、壁纸就上这6个网站,高清无水印,免费下载~

推荐6个高清无水印图片、壁纸网站&#xff0c;质量非常高&#xff0c;还能免费下载&#xff0c;赶紧收藏一波~ 1、wallhaven https://wallhaven.cc/ 一个提供优质电脑高清壁纸搜索引擎&#xff0c;壁纸高清如画&#xff0c;使用后都会爱上彻底不能自拔。 Wallhaven 提供超过7…

Python:变量与数据类型

目录 一、变量 1.1 强数据类型与弱数据类型 1.2 全局函数 1.3 变量的命名规范 二、数据类型 2.1 基本数据类型 2.2 复合数据类型&#xff08;引用数据类型&#xff09; 三、数据类型转换 一、变量 变量&#xff1a;顾名思义&#xff0c;变化的量。在python中代指运行时…

【JAVA语言-第18话】集合框架(五)——Map、HashMap、LinkedHashMap、TreeMap集合

目录 双列集合Map 1.1 概述 1.2 特点 1.3 Map接口中的常用方法 1.3.1 练习 1.4 HashMap集合 1.4.1 概述 1.4.2 特点 1.5 LinkedHashMap集合 1.5.1 概述 1.5.2 特点 1.6 TreeMap集合 1.6.1 概述 1.6.2 特点 1.7 Map集合练习 1.8 HashMap、LinkedHashMap、Tre…

Linux+Win双系统远程重启到Win

背景 电脑安装了双系统&#xff08;ubuntu 22.04 win11&#xff09;&#xff0c;默认进入ubuntu系统。给电脑设置了WoL(Wake-on-LAN)&#xff0c;方便远程开机远程控制。 但是ubuntu的引导程序grub无法远程控制&#xff0c;远程开机会默认进入ubuntu。 虽然说可以进入ubuntu后…

【JavaEE】_HTTP响应

目录 1. 首行 2. 报头header 3.空行 4. 正文body 1. 首行 响应首行&#xff1a;版本号状态码状态码描述&#xff1b; HTTP状态码描述了这次响应的结果&#xff08;比如成功、失败&#xff0c;以及失败原因等&#xff09;&#xff1b; 1. HTTP状态码有&#xff1a; &#…