C++(13)——string类

string类的由来

C语言中,字符串是以 '\0‘ 结尾的一些字符的集合,为例操作方便,C标准库中提供了一些str 系列的库函数,但是这些库函数与字符串是分开的,不太符合OOP(封装、继承和多态)的思想,而且底层空间需要用户自己管理,稍不留神可能会导致越界访问。

因此,在C++中,为了改变这种情况,大佬们创造了string类。

C++中对于string的定义为:typedef basic_string string; 也就是说C++中的string类是一个泛型类,由模板而实例化的一个标准类,本质上不是一个标准数据类型。

在使用string类时,必须包含头文件以及 using namespace std。

string类的常见接口

string类对象的常见构造

上面图片是在cplusplus上面的string类对象的常见构造。我们实现一下。

string类对象的容量操作

size length capacity emply clear

这里主要介绍 size(重点) length capacity empty(重点) clear(重点) reserve(重点) resize(重点)

reserve和resize

接下来,我们看reserve和resize。

reserve是为字符串预留空间。

reserve是为string预留空间,不改变有效元素个数,当reserve的参数小于底层空间大小时,reserve不会改变容量。

resize是将有效字符的个数改成n个,多出的空间用字符填充。

resize在改变元素个数时,如果元素个数增多,可能会改变地城容量大小,如果元素个数减小,底层总空间不变。

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

主要是下面几个:

其中,除了 [] 的运算符重载,剩下的都与迭代器有关。

operate[]

我们先看 [] :

左边是用我们平常的for循环和重载的 [] 来遍历的sl,而右边是范围for遍历的sl。范围for我们后面也还会提到,这里先介绍一下。

begin end rbegin rend

我们重点介绍 begin end rbegin rend

这里先介绍下迭代器。

我们看到上面图片出现了 iterator ,iterator就是迭代器。我们现阶段可以把迭代器理解成类似于指针的东西。

begin和end

看看上面的代码,是不是感觉迭代器和指针有点相似呢。

rbegin和rend

如果我们要从后面到前面,也就是逆着遍历,我们就要用rbegin和rend了,然后迭代器也要换成

reverse_iterator了。注意分别reverse和reserve。

string类对象的修改操作

主要就是上面的几个了。可以将它们分为两类。

一类是: operator+=、append和push_back

还有一类就是:c_str、find、rfind和substr

operator+=、append和push_back

这几个操作符是在string类后面尾插。push_back是尾插字符,append和operator+=都是后面插入字符串。

c_str、find、rfind和substr

c_str是返回C格式字符。

find是从字符串pos开始往后找字符c,然后返回在字符串中的位置。

refind是从字符串pos开始往前找字符c,然后返回在字符串中的位置。

substr是从pos位置开始截取n个字符,然后将其返回。

fopen的第一个参数是const char*类型的,而filename是string类的,所以用c_str返回c格式字符就可以作为fopen的参数了。

结尾

这个就是string类的主要内容了,如果遇到一些其他接口,可以在cplusplus上面查找用法。拜拜

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值