string类的各个功能函数的底层实现

我们在上一篇文章中详细地讲解了string类的各个常用功能成员函数的讲解,本文我们将对上文进行一个小收尾,然后开始实现string类的底层。

一、上一篇的收尾

1.find函数:顾名思义,它的功能是在字符串中找到目标字符并返回它的位置,一般来说如果只传我们要找的字符作为参数,它默认从头开始找,但我们也可以传第二个参数,就可以让其在指定位置之后找字符并返回位置了。与其相似的函数是rfind,它的功能是在字符串中倒着找该字符。

2.substr函数:在字符串中获取子字符串,其返回类型是string,需要传两个参数,即开始获取的位置和结束获取的位置。如果只传一个参数,那么他就会从开始位置一直获取直到字符串结尾。

3.operator+:把两个字符串相加的函数,在string类中,并没有把+的运算符重载写成成员函数,而是写成全局函数。其实是有意为之,我们来看下面这个场景。

截至10行代码之前,我们发现如果把+的函数写成成员函数也没什么问题,但其写成成员函数的作用就体现在第11行,因为如果我们写成成员函数必须要传this指针,而11行的是const char*类型。

4.字符串比较大小函数

在string类中已经对各种比较操作符进行了重载,我们直接使用即可,其本质是进行ASCII码的比较。

5.getline函数

在讲这个函数之前我们用一道题引入:

获取最后一个单词长度,那首先我们应该先获取最后一个单词是什么,也就是说只要获取最后一个单词前的 “ ”(空格符号)然后向后查找就好了。用rfind函数,思路就很简单了

但运行后我们发现不对

为什么呢?

其实,cin和c中的scanf都有一个特点,遇到空格或换行就结束。也就是说在测试用例中我们一旦输入ABSIB以后再输入空格就不会提取后面的T了。此时只提取一个长度为5的单词。那如何解决这个问题呢?getline函数帮你解决,他的特点就是遇到换行才截止。当然也可以传参自己提供你需要的分割符,getline函数的用法是,第一个参数传的是流提取的内容,第二个参数是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值