C++ :string类模板的使用

news2024/10/6 19:46:10

目录

前言:

一、string类模板的介绍

二、string类模板的成员函数的使用

string的构造     

string的赋值运算符重载

iterator迭代器

capacity

Element Access(元素访问)

Modifiers修改字符串

1.+=运算符重载

2.std::string::append

3.void push_back (char c);

4.std::string::assign

5.std::string::insert

6.std::string::erase

7.std::string::swap

8.std::string::pop_back

String operations

copy

find

rfind 

find_first_of

substr

compare

std::operator>> (string)

std::operator<< (string)

std::getline(string)


前言

学完模板以后,基本都知道模板分为函数模板和类模板。它将底层逻辑封装起来,向外提供接口,当使用的时候,只要调用一份模板实例化对象就可以,不需要自己写。这大大提升了写代码的便利。

C语言中,字符串是以'\0'结尾的一些字符的集合。为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数和字符串是分离开的,底层空间要用户自己管理,不注意还会越界访问。所以要学习string类。

在使用string类时,必须包含#include头文件和using namespace std;

一、string类模板的介绍

string的类包含在<string>这个头文件中。

二、string类模板的成员函数的使用

string的构造     

1.string();  无参。实例化一个string对象,这个对象是空的string,长度为0.

2.string(const string& str);  拷贝构造。传了一个const的string类型,传引用,别名是str。把这个str对创建的string对象进行拷贝构造。

3.string (const string& str, size_t pos, size_t len = npos); 子串构造。把从传引用的str的字符串的下标为pos后len个字符拷贝构造给新建的string对象。

如果len没给值,那就默认从pos直到str字符串末尾。

4.string (const char* s);拷贝字符串。把s指针指向的字符串拷贝到新的string对象。s指针指向的需要以\0结尾。

5.string (const char* s, size_t n);  拷贝s指针指向的前n个字符到新建的string对象。

6.string (size_t n, char c); 在string里填充连续n个字符为c

7.template <class InputIterator> string (InputIterator first, InputIterator last); 把这个字符序列以相同的顺序拷贝。支持迭代器的使用。first一般是迭代器的begin(),last可以是begin()+n,或者end()

string的赋值运算符重载

参数可以是string类型的引用,指针(指向字符串),单个字符。赋值完成后,string的长度将会变成新的字符串的长度。

返回*this

iterator迭代器

迭代器可以想象成一个指针,它可能是指针也可能不是。

iterator begin();                     const_iterator begin() const;

begin()   迭代器返回string的开头。返回的是iterator 所以也要用iterator接收。  如果是const属性的,就用第二个。

end()   迭代器返回string的末尾。

rbegin和rend是从后往前数的。

cbegin和cend是对于指向常量字符串使用的。

crbegin和crend是逆置常量字符串使用的。

capacity

1.size_t size() const;     返回字符串的长度,以字节为单位。
2. size_t length() const;  返回字符串的长度,以字节为单位。这个和1功能一样。一开始是length的,但是后来发现length适用字符串而不是和栈堆二叉树等类型,而size应用范围更广,加上不能删length,要兼容以前版本,所以有了两个相同功能的。

3.size_t max_size() const;  返回理论上string可以分配的长度,但是系统的空间并不总是无消耗的,它还可能分配很多其他的空间。所以实际上string并不一定能开到max_size返回的这么大。

4.void resize (size_t n);   void resize (size_t n, char c); resize是改变尺寸,调整大小的意思。如果n比现在的string的size要小,那么缩减string保留前n个。如果n比size要大,那么扩容,如果传了字符c,那么扩容的剩余空间用c初始化,如果没传,就用\0初始化。

5.size_t capacity() const;  返回容量的大小,可以理解为顺序表里的容量。它只是代表分配的内存空间有多大。空间不足需要插入新数据时,会自动扩容。它可以被resize改变。

6.void reserve (size_t n = 0);   扩容的时候可以用它。它可以把空间扩容到n个大小,但不会改变内容,所以也不会改变length或者size。如果n比现在的capacity小,那么不会起作用的。

7.void clear();    清除string的内容,但capacity不变,size为0。

8.bool empty() const;  检查string是否为空,空返回true,其他则返回false。

9.void shrink_to_fit();  没有参数,作用是让capacity和size相等。

Element Access(元素访问)

1.char& operator[] (size_t pos);         const char& operator[] (size_t pos) const;

这个是[]运算符重载,获取字符串的内容,返回pos位置的字符。就跟数组引用功能一样。

如果pos和length相等,并且是const修饰的,那就返回\0。因为length是长度,不是下标。下标要比length少1的,pos作为下标肯定是取不到有效值的。只能取到末尾的\0。

2.char& at (size_t pos);                    const char& at (size_t pos) const;

返回pos位置的字符的引用。如果pos>=size,那么抛异常。

3.char& back();           const char& back() const;

返回字符串最后一个字符的引用。可以和赋值运算符重载结合,修改最后一个字符的value.

4. char& front();const char& front() const;

返回字符串第一个字符的引用。可以和赋值运算符重载结合,修改第一个字符的value.

Modifiers修改字符串

1.+=运算符重载

支持传string类型的对象,char类型的指针和单个字符。

在字符串结尾添加这些。

2.std::string::append

a.追加str的字符串

b.追加str的子串,子串为从下标subpos开始,往后的sublen个位置。

c.追加s指针指向的字符串,并以\0结尾。

d.追加s指针指向的字符串的前n个字符。

e.追加n个字符,连续的n个字符都是给定的c。

f.支持迭代器

3.void push_back (char c);

尾插单个字符

4.std::string::assign

a.把str复制给string对象  (相当于strcpy)

b.复制str的子串,子串为从下标subpos开始,往后的sublen个字符。

c.复制s指向的字符串给对象,以\0结尾。

d.复制s指向的字符串的前n个字符给对象。

e.复制n个指定的字符c给对象。

f.支持迭代器

所谓复制,之前的内容都被清除了,都会被复制后的内容替代。

5.std::string::insert

和前面一样,只是功能变成了插入,从pos位置插入。

6.std::string::erase

a.删除从pos位置开始往后的len个字符。如果pos和len都没给特定值,则默认pos为0,删完。

b.支持迭代器,删除迭代器所指向的字符

c.删除迭代器指向的区间的字符。

7.std::string::swap

void swap (string& str);

交换两个字符串的内容

8.std::string::pop_back

void pop_back();

删除字符串的最后一个字符,会影响length

String operations

copy

size_t copy (char* s, size_t len, size_t pos = 0) const;

复制this指针的pos往后的len个字符到指定的s指针中。

find

在this指针中找特定的字符串中第一次出现的位置,返回它的下标。如果指定了pos,那么就从pos位置开始找,pos之前的忽略不计。

第三个buffer,从this指针中的pos位置开始,找s指针的前n个字符。返回它所在的下标。

第四个  从this指针中pos位置开始找字符c。找到以后返回下标。

找不到返回npos

rfind 

从后往前找,功能类似

find_first_of

这个就是从this指针里找str/s/s的子串.只是find需要全部字符都匹配,而find_first_of则只需要一个字符匹配就可以。给定的字符中的第一个开始匹配。找到了就返回。

没有匹配的字符则返回npos

这个和first不一样的是,它是从给定的字符中的最后一个开始匹配。找到了就返回。

找和给定字符串不匹配的,找到了返回。逻辑和前面的一样。

substr

string substr (size_t pos = 0, size_t len = npos) const;

从this指针的pos位置开始的len个长度,拷贝给 string对象进行构造,返回string

compare

比较两个字符串的大小,一个个字符比。哪些字符的话,看具体的函数内容,要用的时候直接去库里看吧。

std::operator>> (string)

istream& operator>> (istream& is, string& str);

支持cin直接从string类型对象里面提取。

std::operator<< (string)

ostream& operator<< (ostream& os, const string& str);

支持cout直接从string类型对象读取输出。

std::getline(string)

可以读取缓存区里的字符。除非遇上\n否则不会停止读取。cin会把'  '看作不同字符串的间隔,不会读取到空格,getline可以。

提供各种运算符重载,支持string类型对象的比较大小。

这些都是通过调用compare函数比较的。

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

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

相关文章

全领域覆盖!美创入选IDC中国数据安全市场图谱

近日&#xff0c;全球领先的IT市场研究和咨询公司IDC发布首个《IDC Market Glance&#xff1a;中国数据安全市场图谱&#xff0c;2024》报告&#xff08;以下简称“报告”&#xff09;&#xff0c;该报告遴选出不同细分市场领域的主要技术服务供应商&#xff0c;绘制出市场地图…

第四百七十五回

文章目录 1. 概念介绍2. 功能与用法2.1 主要功能2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"四个bublue包对比与总结"相关的内容&#xff0c;本章回中将介绍Get包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中将介…

Open Footprint®论坛数据模型Snapshot发布,与您全‘绿’以赴!

正值第55个“&#x1f30d;世界地球日”&#xff0c;The Open Group Open Footprint论坛很高兴地正式宣布《Open Footprint数据模型Snapshot》”的可用性。我们的期望是&#xff0c;一旦被广泛采用&#xff0c;数据模型将大大缓解内部以及范围3排放数据共享问题&#xff0c;有效…

linux autogroup

一&#xff1a;概述 对于linux autogroup的作用&#xff0c;很多同学可能是听说过&#xff0c;但&#xff0c;并未验证过。 考虑下面场景&#xff0c;开两个terminal&#xff0c;T1和T2&#xff0c;在T1中运行进程P1&#xff0c;P1开启9个线程编译代码&#xff0c;在T2中运行…

金融数字化能力成熟度指引

1 范围 本文件提出了金融数字化能力成熟度模型、成熟度计算方法&#xff0c;明确了不同维度金融数字化转型能力 相应的分档要求。 本文件适用于金融机构衡量金融科技应用和数字化转型发展水平&#xff0c;检视自身数字化发展优势与短板&#xff0c; 加快数字化转型&#xff0c…

Docker搭建代码托管Gitlab

文章目录 一、简介二、Docker部署三、管理员使用四、用户使用五、用户客户端 一、简介 GitLab是一个基于Git的代码托管和协作平台&#xff0c;类似于GitHub。 它提供了一个完整的工具集&#xff0c;包括代码仓库管理、问题跟踪、CI/CD集成、代码审查等功能。 GitLab的开源版本…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-1.1

前言&#xff1a; 本文是来自哔哩哔哩网站上视频“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”的学习笔记&#xff0c;在这里会记录下正点原子Linux ARM MX6ULL 开发板根据配套的哔哩哔哩学习视频所作的实验和笔记内容。本文大量的引用了正点原子哔哔哩网…

客户关系智慧:CRM系统五大功能助力企业发展

CRM软件必备功能有“销售自动化、销售流程管理、全渠道沟通平台、BI数据分析以及销售活动管理。” 一家业务流程完善的公司&#xff0c;总是少不了提到CRM。对CRM还尚不可知的企业可能会疑惑了——总是听到别人提到CRM&#xff0c;CRM到底有哪些功能&#xff1f;这些功能又怎么…

【数据结构(邓俊辉)学习笔记】向量03——常规向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络&#xff0c; 2020)用于特征融合层。 官方论文地址&#xff1a;https://arxiv.org…

【前后端】django与vue的结合使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、前后端分离的简介二、django与vue的结合使用三、总结 前言 随着开发语言及人工智能工具的普及&#xff0c;使得越来越多的人会主动学习使用一些开发工具&a…

DBA真的以后只能去开滴滴了吗

上周某微信群关于DBA的话题讨论的非常火热&#xff0c;当天由于比较忙&#xff0c;因此没有参与太多讨论&#xff0c;现在回想起来&#xff0c;这个话题还是蛮有意思的。 为什么Oracle DBA收入这么低&#xff1f; 老实说&#xff0c;作为一个干了10多年Oracle的人来说&#xff…

【java配置】jpcap的下载与idea配置

解决报错&#xff1a;Cannot resolve symbol ‘jpcap’ 1. jpcap的下载 官网下载链接 百度网盘下载 双击WinpPca安装&#xff0c;jacap1和jpcap2任选其中之一 2. idea配置 &#xff08;1&#xff09;查看当前使用jdk目录 File -> Project Settings -> SDKs &#…

第二篇、SD真人视频转卡通动画 学习笔记

接着第一篇 2K转4K 生成玩卡通视频后&#xff0c;如何转换成更高分辨率的视频 1、将第一篇生成的工作目录下的output目录改成output-old&#xff0c;新建一个output目录 2、进入0&#xff0c;1子目录&#xff0c;把EbSynth生成的Outputxxx都删掉&#xff0c;frames和keys下…

01_Nginx

文章目录 NginxNginx的核心功能Nginx的优势Nginx常用指令Nginx配置文件Nginx的核心功能&#xff1a;反向代理 Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也提供了IMAP/POP3/SMTP服务。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子…

中兴5G随身wifi怎么样?中兴5G随身wifiVS格行5G随身wifi对比测评!公认最好的随身WiFi的格行随身WiFi真实测评!随身WiFi哪个品牌好?

随着各大品牌5G随身wifi的横空出世&#xff0c;其中中兴和格行5G随身wifi的呼声越来越高&#xff0c;那么性能上谁更胜一筹&#xff1f;套餐费用谁更亲民&#xff1f;售后保障谁更到位&#xff1f;今天就来一个全方位测评对比&#xff01; 一&#xff0c;首先是设备的整体外观&…

查找两个字符串的最长公共子串

暴力解法 #include <iostream> #include <vector> #include <cstring> using namespace std; string a, b, minn ""; // a和b是我们输入的 // minn存储的是我们最小的那个字符串string cut(int l, int r) {string tmp "";for (int i …

通过商品id采集京东商品详情数据(含价格、优惠券、详情、主图等字段)

item_get_app-获得JD商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;注册账号获取测试key&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cach…

S32 Design Studio PE工具配置canCom

工具配置 基本就是默认配置就行&#xff0c;有需要的话就按照下面的方式改改。 生成代码 在Generated_Code/canCom1.c里面&#xff0c;对应刚才配置的信息。canCom1_InitConfig0是配置结构体&#xff0c;canCom1_State是初始化之后的状态结构体。 flexcan_state_t canCom1_S…

2024新算法角蜥优化算法(HLOA)和经典灰狼优化器(GWO)进行无人机三维路径规划设计实验

简介&#xff1a; 2024新算法角蜥优化算法&#xff08;HLOA&#xff09;和经典灰狼优化器&#xff08;GWO&#xff09;进行无人机三维路径规划设计实验。 无人机三维路径规划的重要意义在于确保飞行安全、优化飞行路线以节省时间和能源消耗&#xff0c;并使无人机能够适应复杂…