STL常用容器(string容器)---C++

STL常用容器目录

  • 1.string容器
    • 1.1 string基本概念
    • 1.2 string构造函数
    • 1.3 string赋值操作
    • 1.4 string字符串拼接
    • 1.5 string查找和替换
    • 1.6 string字符串比较
    • 1.7 string字符存取
    • 1.8 string插入和删除
    • 1.9 string子串

在这里插入图片描述

1.string容器

1.1 string基本概念

本质:

  • string是C++风格的字符串,而string本质上是一个.
  • 头文件:

string和char * 区别:

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

特点:
string 类内部封装了很多成员方法:
例如:查找find,拷贝copy,删除delete 替换replace,插入insert;
string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责。

1.2 string构造函数

构造函数原型:

  • string(); //创建一个空的字符串 例如: string str;
  • string(const char* s); //使用字符串s初始化
  • string(const string& str); //使用一个string对象初始化另一个string对象
  • string(int n, char c); //使用n个字符c初始化

示例:

#include <string>
void test01()
{string s1;//创建空字符串,调用无参构造函数cout << "str1 = " << s1 << endl;//char* str2 = "Hello world!";//报错,系统默认"Hello world!"为const char*类型const char* str2 = "Hello world!";string s2(str2);//使用字符串str2初始化cout << "str2 = " << s2 << endl;string s3(s2);//调用拷贝构造函数cout << "str3 = " << s3 << endl;string s4(10, 'A');//使用10个字符A初始化成字符串cout << "str4 = " << s4 << endl;
}

在这里插入图片描述

1.3 string赋值操作

赋值的函数原型:

  • string& operator=(const char* s); //char*类型字符串 赋值给当前的字符串
  • string& operator=(const string &s); //把字符串s赋给当前的字符串
  • string& operator=(char c); //字符赋值给当前的字符串
  • string& assign(const char *s); //把字符串s赋给当前的字符串
  • string& assign(const char *s, int n); //把字符串s的前n个字符赋给当前的字符串
  • string& assign(const string &s); //把字符串s赋给当前字符串
  • string& assign(int n, char c); //用n个字符c赋给当前字符串

示例:

void test02()
{string str1 = "Hello world!";//char*类型字符串 赋值给当前的字符串string str2 = str1;//把字符串str1赋给当前的字符串cout << "str1 = " << str1 << endl;cout << "str2 = " << str2 << endl;string str3;str3 = 'A';//字符赋值给当前的字符串cout << "str3 = " << str3 << endl;string str4;str4.assign("Hello c++");//把字符串Hello c++赋给当前的字符串cout << "str4 = " << str4 << endl;string str5;str5.assign("Hello c++", 5);//把字符串Hello c++的前n个字符赋给当前的字符串cout << "str5 = " << str5 << endl;string str6;str6.assign(str5);//把字符串str5赋给当前字符串cout << "str6 = " << str6 << endl;string str7;str7.assign(5, 'X');//用5个字符X赋给当前字符串cout << "str7 = " << str7 << endl;
}

在这里插入图片描述

1.4 string字符串拼接

功能描述:

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

函数原型:

  • string& operator+=(const char* str); //重载+=操作符
  • string& operator+=(const char c); //重载+=操作符
  • string& operator+=(const string& str); //重载+=操作符
  • string& append(const char *s); //把字符串s连接到当前字符串结尾
  • string& append(const char *s, int n); //把字符串s的前n个字符连接到当前字符串结尾
  • string& append(const string &s); //同operator+=(const string& str)
  • string& append(const string &s, int pos, int n);//字符串s中从pos开始的n个字符连接到字符串结尾

示例:

void test03()
{//重载+=操作符string str1 = "千里";str1 += "之行"; //把字符串"之行"连接到当前字符串结尾cout << "str1 = " << str1 << endl;str1 += ',';//把字符','连接到当前字符串结尾cout << "str1 = " << str1 << endl;string str2 = "始于足下";str1 += str2;//把字符串"始于足下"连接到当前字符串结尾cout << "str1 = " << str1 << endl;string str3 = "A thousand mile";str3.append(" trip ");//把字符串" trip "连接到当前字符串结尾str3.append("begins with you", 11);//把字符串"begins with you"前11个字符连接到当前字符串结尾string str = " one step.";//str3.append(str, 0, 10); // 从下标0位置开始 ,截取10个字符,拼接到字符串末尾str3.append(str);//效果同上,将str字符串拼接至末尾cout << "str3 = " << str3 << endl;
}

在这里插入图片描述
注意:对于用“ ”括住的本质是属于const char*类型的,但将其赋值给string类型时,其就变成了string类型。

1.5 string查找和替换

功能描述:

  • 查找:查找指定字符串是否存在;
  • 替换:在指定的位置替换字符串;

函数原型:

  • int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找(返回所在位置下标
  • int find(const char* s, int pos = 0) const; //查找s第一次出现位置,从pos开始查找
  • int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
  • int find(const char c, int pos = 0) const; //查找字符c第一次出现位置
  • int rfind(const string& str, int pos = npos) const; //查找str最后一次位置,从pos开始查找
  • int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找
  • int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
  • int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
  • string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
  • string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串s

示例:

void test04()
{//查找string str1 = "abcdefgde";//位置从0开始int pos = str1.find("de");//在str1中查找de,返回其第一次出现的位置if (pos == -1)//未找到返回-1{cout << "未找到" << endl;}else{cout << "pos = " << pos << endl;}pos = str1.rfind("de");//从右往左,在str1中查找de,返回其最后一次出现的位置cout << "pos = " << pos << endl;//替换string str2 = "abckkkxyz";str2.replace(3, 3, " vs ");//替换从3开始3个字符为字符串" vs "cout << "str2 = " << str2 << endl;
}

在这里插入图片描述
总结:

  • find查找是从左往后,rfind从右往左;
  • find找到字符串后返回查找的第一个字符位置,找不到返回-1;
  • replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串。

1.6 string字符串比较

功能描述:

  • 字符串之间的比较

比较方式:

  • 字符串比较是按字符的ASCII码进行对比
  • = 返回 0
  • >返回 1
  • < 返回 -1

函数原型:

  • int compare(const string &s) const; //与字符串s比较
  • int compare(const char *s) const; //与字符串s比较

示例:

void test05()
{string s1 = "hello";string s2 = "aello";int ret = s1.compare(s2);//a和h的ASCII码值分别为97,104if (ret == 0) {cout << "s1 等于 s2" << endl;}else if (ret > 0){cout << "s1 大于 s2" << endl;}else{cout << "s1 小于 s2" << endl;}
}

在这里插入图片描述

1.7 string字符存取

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

  • char& operator[](int n); //通过[]方式取字符
  • char& at(int n); //通过at方法获取字符

示例:

void test06()
{string str = "hello world";//size()字符串中字符个数cout << str.size() << endl;for (int i = 0; i < str.size(); i++){cout << str[i] << " ";}cout << endl;for (int i = 0; i < str.size(); i++){cout << str.at(i) << " ";}cout << endl;//字符修改str[0] = 'x';//修改为xello worldstr.at(1) = 'x';//修改为xxllo worldcout << str << endl;
}

在这里插入图片描述
总结:string字符串中单个字符存取有两种方式,利用 [ ] 或 at

1.8 string插入和删除

功能描述:

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

函数原型:

  • 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 = npos); //删除从Pos开始的n个字符

示例:

void test07()
{string str = "hello";str.insert(1, "XXX");cout << str << endl;str.erase(1, 3);  //从1号位置开始3个字符cout << str << endl;
}

在这里插入图片描述
**总结:**插入和删除的起始下标都是从0开始

1.9 string子串

功能描述:

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

函数原型:

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

示例:

void test08()
{string email = "12346789@qq.com";int pos = email.find("@");//返回@所在位置string QQ = email.substr(0, pos);cout << "username: " << QQ << endl;
}

在这里插入图片描述

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

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

相关文章

AI:135-基于卷积神经网络的艺术品瑕疵检测与修复

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

C/C++暴力/枚举/穷举题目持续更新(刷蓝桥杯基础题的进!)

目录 前言 一、百钱买百鸡 二、百元兑钞 三、门牌号码&#xff08;蓝桥杯真题&#xff09; 四、相乘&#xff08;蓝桥杯真题&#xff09; 五、卡片拼数字&#xff08;蓝桥杯真题&#xff09; 六、货物摆放&#xff08;蓝桥杯真题&#xff09; 七、最短路径&#xff08;蓝…

基于 java springboot+layui仓库管理系统

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

MySQL - 事务日志

目录 1. redo日志 1.1 为什么需要REDO日志 1.2 REDO日志的好处、特点 1. 好处 2. 特点 1.3 redo的组成 1.4 redo的整体流程 1.5 redo log的刷盘策略 1.6 不同刷盘策略演示 1. 流程图 ​编辑2. 举例 1.7 写入redo log buffer 过程 1.8 redo log file 1. 相关参数…

如何学习VBA_3.2.16-17:VBA中的判断函数及数组的基本概念

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

内核解读之内存管理(8)什么是page cache

文章目录 0. 文件系统的层次结构1.什么是page cache2.感观认识page cache3. Page Cache的优缺点3.1 Page Cache 的优势3.2 Page Cache 的劣势 0. 文件系统的层次结构 在了解page cache之前&#xff0c;我们先看下文件系统的层次结构。 1 VFS 层 VFS &#xff08; Virtual Fi…

Vue | (五)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;Todo-list 案例&#x1f407;组件化编码流程&#xff08;通用&#xff09;&#x1f407;实现静态组件&#x1f407;展示动态数据&#x1f407;交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

Linux---进程间通信(下)

1、System V 共享内存 原理如下图 系统调用接口介绍 int shmget(key_t key, size_t size, int shmflg) 功能&#xff1a;用来创建共享内存 参数 key&#xff1a;这个共享内存段名字&#xff0c;内核用key来标识共享内存size&#xff1a;共享内存大小shmflg&#xff1a;由九个权…

软件游戏显示d3dx9_42.dll丢失的5种解决方法,快速解决dll问题

当计算机系统中d3dx9_42.dll文件丢失时&#xff0c;可能会引发一系列运行问题和功能异常&#xff0c;具体表现形式多样且影响范围较广。首先&#xff0c;对于依赖于DirectX 9.0c版本的各类应用程序&#xff0c;尤其是部分经典的老款游戏&#xff0c;由于d3dx9_42.dll是其中不可…

云原生之API网关Traefik

1. 前言 说到web服务的开源网关&#xff0c;我首先想到的是Nginx&#xff0c;最早使用的就是它&#xff0c;现在都还在使用它。系统上线了Docker Swarm集群之后&#xff0c;不继续使用Nginx直接做Docker服务的网关&#xff0c;是因为Nginx毕竟比Docker Swarm出现的早&#xff0…

用Python实现创建十二星座数据分析图表

下面小编提供的代码中&#xff0c;您已经将pie.render()注释掉&#xff0c;并使用了pie.render_to_file(十二星座.svg)来将饼状图渲染到一个名为十二星座.svg的文件中。这是一个正确的做法&#xff0c;如果您想在文件中保存图表而不是在浏览器中显示它。 成功创建图表&#xf…

图解目标检测 之 【YOLOv9】 算法 最全原理详解

YOLOv9与SOTA模型对比 什么是 YOLOv9&#xff1f;YOLOv9是YOLO系列中的最新产品&#xff0c;是一种实时目标检测模型。它通过先进的深度学习技术和架构设计&#xff0c;包括通用 ELAN (GELAN) 和可编程梯度信息 (PGI)&#xff0c;展现出更好的性能。 YOLO 系列通过引入计算机视…