iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++STL容器中string类怎么用
  • 897
分享到

C++STL容器中string类怎么用

2023-06-29 10:06:51 897人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关c++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言为什么学习string类:在C语言中,字符串是以'\0'结尾的集合,为了

这篇文章将为大家详细讲解有关c++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

前言

为什么学习string类:

C语言中,字符串是以'\0'结尾的集合,为了操作方便,在C标准库中提供一些str系列的函数(strstr,strcmp,strcpy……),但是这些库函数和字符串时分离的,不太符合oop的思想。稍不留神就会造成越界访问。

在OJ题中,有关字符串的题目基本以string的形式出现,而且在常规的工作中,为了简单,方便,快捷,基本都是使用string类,很少有人会使用C库中的字符串操作函数。

1.标准库中的string类

string类是表示字符串的字符种类。

该类的接口与常规容器的接口基本相同,在添加一些专门用来操作string的常规操作。

string的底层是:basic_string模板类的别名。

不能操作多字节或者变长字符的序列。

在使用string的时候,必需包含头文件#include<string>以及using namespace std;

2.string类的常用接口说明

2.1 string对象的常见构造

string() 构造空的string类对象
string(const char* str)以常量字符创为参数构造string类
string(size_t n,char ch)string对象中包含了n个字符c
string(const string& s)

拷贝构造函数

#include<iOStream>#include<string>using namespace std;int main(){string s1;string s2("CSDN");string s3(4, 'A');string s4(s2);cout << s1 << endl;cout << s2 << endl;cout << s3 << endl;cout << s4 << endl;} [点击并拖拽以移动]

 运行结果:

C++STL容器中string类怎么用

2.2 string类对象的容量操作 

size返回字符串的有效长度
length和size一致,推荐使用size
capacity返回总空间大小
clear清空有效字符,但是不对capacity有影响
reserve为字符串预留空间
empty判断字符串是否为空串,返回值为bool
resize

将有效字符的个数该成n个,多出的空间用字符c填充

 2.2.1 reserve是如何开辟空间的

 void reserve (size_t n=0)

void TestPushBack(){string s;size_t sz = s.capacity();for (int i = 0; i < 1000; ++i){s.push_back('c');if (sz != s.capacity())//当sz和_capacity不相等的时候,说明reserve已经增容了。{static int n = 1;sz = s.capacity();printf("第%d次开辟空间:_capacity=%d\n", n++, sz);}}}

运行结果:

C++STL容器中string类怎么用

说明在VS的环境下,reserve每次开辟的空间是前一次空间的约1.5倍。

2.2.2 clear 和 empty

 void clear ()

bool empty() const

#include<iostream>#include<string>using namespace std;int main(){string s1("CSDN");cout << s1.capacity() << endl;cout << s1.empty() << endl;s1.clear();cout << s1.capacity() << endl;cout << s1.empty() << endl;}

运行结果:

C++STL容器中string类怎么用

说明了clear只会清理有效的字符串,不会对空间的大小有影响,当clear后,empty的返回值为0,说明了此时的是s1是空字符串。

2.2.3 resize的用法

void resize(size_t n)

void resize(size_t n,char ch)

#include<iostream>#include<string>using namespace std;int main(){string s1("CSDN");s1.resize(10, 'A');//输出的是------>CSDNAAAAAAAAcout <<s1<< endl;}

2.3 string类对象的访问以及遍历操作 

operator[ ]

返回 pos 位置的字符, const string 类对象调用

begin+end

begin 获取一个字符的迭代器  +  end 获取最后一个字符下一个位置的迭代器 (正向迭代器)

rbegin+rend

begin 获取一个字符的迭代器  +  end 获取最后一个字符下一个位置的迭代器 (反向迭代器)

范围forC++11支持的更简洁的遍历方式

const_iterator begin()const

iterator begin()

#include<iostream>#include<string>using namespace std;int main(){string s1("hello CSDN");auto it1= s1.begin();//正向迭代器while (it1 != s1.end())//end指向的是最后一个元素的下一位{cout << *it1 << " ";it1++;}cout << endl;auto it2 = s1.rbegin();//反向迭代器while (it2 != s1.rend()){cout << *it2 << " ";it2++;}}

运行结果:

C++STL容器中string类怎么用

范围for的使用
#include<iostream>#include<string>using namespace std;int main(){string s1("hello CSDN");for (auto ch :s1)cout << ch<< " ";}

C++STL容器中string类怎么用

本质上,范围for调用的是迭代器。

2.4 string类对象的修改操作 

push_back尾插字符ch
append尾插字符串str
operator+=尾插字符ch/尾插字符串
c_str返回C格式字符串
find+npos

从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置,npos是size_t的最大值

rfind

从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置

substr

在str中从pos位置开始,截取n个字符,然后将其返回

2.4.1 push_back 和 append 以及operator+=

void push_back(char ch)

string& append(const char* str)

string& operator+=(char ch)

string& operator+=(const char* str)

#include<iostream>#include<string>using namespace std;int main(){string s1("hello ");s1.push_back('C');s1.append("SDN");cout << s1 << endl;string s2("hello ");s2 += 'w';s2 += "orld";cout << s2 << endl;}

运行结果:

C++STL容器中string类怎么用

operator +=可以尾插字符,也可以尾插字符串。实际上,operator +=尾插字符的时候,调用的是push_back,尾插字符串的时候,调用的是append。

2.4.2  find 和 rfind 以及 substr

size_t find(char c,size_t pos=0) const

size_t rfind(char c,size_t pos=npos)

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

#include<iostream>#include<string>using namespace std;int main(){string s1("hello CSDN");cout << s1.find('C') << endl;cout << s1.rfind('C',0) << endl;//从pos=0处,即字符'h'往前找,找不到字符'C'返回的是npos                                //npos是size_t中的最大值--->4294967295cout << s1.rfind('C', 8) << endl;cout << s1.substr(2, 3) << endl;//从字符串的第二个位置开始,截取len=3个字符}

运行结果:

C++STL容器中string类怎么用

2.5 string非成员函数重载

operator+尽量少用,因为传值返回,导致深拷贝效率低
operator<<输出运算符重载
operator>>输出运算符重载
getline获取一行字符串
relational operator大小比较

关于“C++STL容器中string类怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: C++STL容器中string类怎么用

本文链接: https://www.lsjlt.com/news/324158.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++STL容器中string类怎么用
    这篇文章将为大家详细讲解有关C++STL容器中string类怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言为什么学习string类:在C语言中,字符串是以'\0'结尾的集合,为了...
    99+
    2023-06-29
  • 一起来看看C++STL容器之string类
    目录前言1.标准库中的string类2.string类的常用接口说明2.1 string对象的常见构造2.2 string类对象的容量操作  2.2.1 rese...
    99+
    2022-11-13
  • C++ STL中容器适配器怎么实现
    这篇文章给大家分享的是有关C++ STL中容器适配器怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 stack1.1 stack 介绍 stack是一种容器适配器,专门用在具有后进先出操作的上...
    99+
    2023-06-14
  • 怎么用C++模拟实现STL容器
    这篇文章主要介绍了怎么用C++模拟实现STL容器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用C++模拟实现STL容器文章都会有所收获,下面我们一起来看看吧。一、list的介绍列表是一种顺序容器,它允许在...
    99+
    2023-07-04
  • C++怎么使用STL迭代器和容器
    这篇“C++怎么使用STL迭代器和容器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么使用STL迭代器和容器”文章吧...
    99+
    2023-07-02
  • C++STL中vector容器的使用
    目录一、vector(1)区分size()和capacity()(2)迭代器失效(3)区分const_iterator和const iterator(4)区分reserve()和re...
    99+
    2022-11-13
  • C++怎么使用string容器
    本篇内容主要讲解“C++怎么使用string容器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么使用string容器”吧!string基本概念本质:string是c++风格的字符串,而s...
    99+
    2023-07-02
  • 如何在C++中使用 STL 顺序容器
    今天就跟大家聊聊有关如何在C++中使用 STL 顺序容器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++ 标准模板库 STL 顺序容器容器数据结构顺序性重复性支持迭代器vecto...
    99+
    2023-06-15
  • C++深入分析STL中map容器的使用
    目录1、map容器2、map容器原理3、map容器函数接口4、使用示例1、map容器 map是C++ STL的一个关联容器,它提供一对一的数据处理能力。其中,各个键值对的键和值可以是...
    99+
    2022-11-13
  • C#中数据类型string怎么用
    这篇文章主要为大家展示了“C#中数据类型string怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#中数据类型string怎么用”这篇文章吧。string是各种编程语言中最基础的数据类型...
    99+
    2023-06-17
  • 怎么使用C++中的string类型
    这篇文章主要讲解了“怎么使用C++中的string类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用C++中的string类型”吧!1、string 类1.1 和char *的异同在...
    99+
    2023-06-25
  • C++ STL中常用算法怎么使用
    这篇文章主要讲解了“C++ STL中常用算法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++ STL中常用算法怎么使用”吧!前言在C++中使用STL算法都要包...
    99+
    2023-06-21
  • C++中STL标准库std::vector怎么用
    小编给大家分享一下C++中STL标准库std::vector怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 简介vector 是表示可以改变大小的数组的...
    99+
    2023-06-29
  • C语言中怎么动态扩容String
    这篇文章给大家介绍C语言中怎么动态扩容String,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先定义一个string的句柄,相当于C++中的实例struct c_string; typedef&...
    99+
    2023-06-16
  • 如何在C++中使用STL关联式容器自定义排序规则
    如何在C++中使用STL关联式容器自定义排序规则?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1) 使用函数对象自定义排序规则#include <iostrea...
    99+
    2023-06-06
  • Java中String类怎么用
    这篇文章主要为大家展示了“Java中String类怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java中String类怎么用”这篇文章吧。大部分编程语言都能够处理字符串(String)。...
    99+
    2023-06-02
  • C++中的string怎么使用
    在C++中,可以使用string类来处理字符串。首先,需要包含头文件。以下是一些常用的string操作:1. 声明和初始化strin...
    99+
    2023-08-17
    C++ string
  • C++中常见容器类如何使用
    本篇内容主要讲解“C++中常见容器类如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中常见容器类如何使用”吧!综合示例1. vector:动态数组,支持随机访问#include&nb...
    99+
    2023-07-05
  • Typescript中string类型怎么用
    这篇文章给大家分享的是有关Typescript中string类型怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。string字符串类型,和javascript一样,可以使用双...
    99+
    2022-10-19
  • 怎么在C++中使用deque容器
    这篇文章给大家介绍怎么在C++中使用deque容器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作