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.mzph.cn/news/702515.shtml

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

相关文章

电子签证小程序系统源码后台功能列表

基于ThinkPhp8.0uniapp 开发的电子签证小程序管理系统。能够真正帮助企业基于微信公众号H5、小程序、wap、pc、APP等&#xff0c;实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、预约、O2O、多店等各种业务需求&#xff0c;快速积累客户、…

搜索专项---IDA*

文章目录 排书回转游戏 一、排书OJ链接 本题思路:先考虑每一步的决策数量&#xff1a;当抽取长度为 i 的一段时&#xff0c;有 n−i1 种抽法&#xff0c;对于每种抽法&#xff0c;有 n−i 种放法。另外&#xff0c;将某一段向前移动&#xff0c;等价于将跳过的那段向后移动&am…

C++之std::tuple(二) : 揭秘底层实现原理

相关系列文章 C之std::tuple(二) : 揭秘底层实现原理 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 深入理解可变参数(va_list、std::initializer_list和可变参数模版) st…

【JVM】线上一次fullGC排查思路

fullGC问题背景 监控告警发现&#xff0c;今天开始我们线上应用频繁出现fullGC&#xff0c;并且每次出现后磁盘都会被占满 查看监控 查看监控发现FULLGC的机器均为同一个机房的集器&#xff0c;并且该机房有线上error报错&#xff0c;数据库监控对应的时间点也有异常&#x…

数据结构知识点总结-绪论 数据结构基本术语 算法及评价

要求 &#xff08;1&#xff09;对数据结构这么课学了哪些知识有个清楚的认知&#xff1b; &#xff08;2&#xff09;掌握目录结构&#xff0c;能复述出来每个知识点下都有哪些内容。 如下图所示&#xff0c;可自行制作思维导图&#xff0c;针对自己薄弱的地方进行复习。 …

curl与HTTP状态码

目录 一、curl &#xff08;一&#xff09;curl简介 &#xff08;二&#xff09;curl命令的选项 二、HTTP状态码 &#xff08;一&#xff09;状态码的含义 &#xff08;二&#xff09;状态码分类 1.默认的状态码 2.自定义状态码 一、curl &#xff08;一&#xff09;c…

NGINX服务器配置实现加密的WebSocket连接WSS协议

一、背景 最近在做小程序开发&#xff0c;需要在nginx中配置websocket加密模式&#xff0c;即wss。初次配置wss时&#xff0c;踩了两个小时的坑&#xff0c;本文将踩坑过程分享给大家&#xff0c;有需要用到的伙伴可以直接copy即可实现&#xff0c;节省宝贵时间。 二、WebSo…

代码随想录第41天|● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

文章目录 背包问题背包题目解法一 ● 01背包问题-二维数组五部曲1.确定dp数组2、确定递推公式3、初始化dp数组4、循环代码&#xff1a; 解法二-01背包问题-滚动数组五部曲1&#xff1a;定义dp二、递推公式三、初始化四、循环顺序代码&#xff1a; 698. 划分为k个相等的子集题解…

FairyGUI × Cocos Creator 3.x 使用方式

前言 上一篇文章 FariyGUI Cocos Creator 入门 简单介绍了FairyGUI&#xff0c;并且按照官方demo成功在Cocos Creator2.4.0上运行起来了。 当我今天使用Creator 3.x 再引入2.x的Lib时&#xff0c;发现出现了报错。 这篇文章将介绍如何在Creator 3.x上使用fgui。 引入 首先&…

uniapp开发安卓app华为平板真机预览

首先使用数据线连接平板和电脑设备 一、前期准备 平板需要开启三个地方&#xff1a; 1、打开设置&#xff0c;在搜索框中输入版本号/或者直接点击最下方的【关于平板电脑】&#xff0c;点击版本号进入关于平板的界面&#xff0c;连续点击版本号7次&#xff0c;直到出现提醒“…

2.25基础会计学

资本公积是指由股东投入、但不能构成“股本”或“实收资本”的资金部分。 盈余公积是指公司按照规定从净利润中提取的各种积累资金。 所以区别在于盈余公积来自净利润。 借贷其实就是钱从哪来和到哪去的问题&#xff0c;来源是贷&#xff0c;流向是借。比如购入9w原材料&…

基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................…

facebook群控如何做?使用静态住宅ip代理有什么好处?

在进行Facebook群控时&#xff0c;ip地址的管理是非常重要的&#xff0c;因为Facebook通常会检测ip地址的使用情况&#xff0c;如果发现有异常的使用行为&#xff0c;比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等&#xff0c;就会视为垃圾邮件或…

RK3568平台开发系列讲解(Linux系统篇)字符设备驱动:分配和注册字符设备

🚀返回专栏总目录 文章目录 一、分配和注册字符设备二、file_operations沉淀、分享、成长,让自己和他人都能有所收获!😄 一、分配和注册字符设备 字符设备在内核中表示为struct cdev的实例。在编写字符设备驱动程序时,目标是最终创建并注册与struct file_operations关联…

栈和队列笔试题

答案&#xff1a;&#xff08;1&#xff09;seqn[tail]data; tail(tail1)%SEQLEN; &#xff08;2&#xff09;data seqn[head]; head (head1)%SEQLEN; &#xff08;3&#xff09;head tail; &#xff08;4&#xff09;(tail1)%SEQLEN head; (5) while(head!tail) head (h…

JVM内存结构介绍

1.程序计数器&#xff08;Program Counter Register&#xff09; 程序计数器是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里&#xff08;仅是概念模型&#xff0c;各种虚拟机可能会通过一些更高效的方式去实现&…

电商评价分析:NLP信息抽取技术在用户评论中的应用与挖掘

一、引言 在2019年&#xff0c;电子商务的蓬勃发展不仅推动了消费市场的增长&#xff0c;也带来了海量的用户评价数据。这些数据&#xff0c;作为消费者对商品和服务直接反馈的载体&#xff0c;蕴含着巨大的价值。然而&#xff0c;由于其非结构化的特性&#xff0c;这些文本信息…

解决ssh:connect to host github.com port 22: Connection timed out与kex_exchange_identification

一、问题 无法进行clone项目和其他Git操作。执行检测连接命令 ssh -T gitgithub,com报错 ssh:connect to host github.com port 22: Connection timed out 即&#xff1a;连接22端口超时 涉及到的文件&#xff1a; C:\Users\JIACHENGER.ssh\config C:\Users\JIACHENGER.ssh\…

Python实用技巧:输出列表(list)的倒序/逆序的几种方法

Python实用技巧&#xff1a;输出列表&#xff08;list&#xff09;的倒序/逆序的几种方法 &#x1f4c5;2024年02月25日 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质…

Linux修改shell工具连接端口

nano /etc/ssh/sshd_config 或者 vi /etc/ssh/sshd_config 或者 vim /etc/ssh/sshd_config