C++中的string类

一、产生

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可 能还会越界访问。所以在C++中就在std域里封装了string类,使得字符串的处理比C语言更加方便,灵活,快捷。在底层string类实际上是basic_string模板类的别名,
typedef basic_string<char, char_traits, allocator> string;

二、常用接口介绍

1.构造函数
string既然是一个类,那么必然就有构造函数,以下是四个常见的构造函数,实际上共有20种。

函数名称功能说明
string()构造空string类,里面存放空字符串
string(const char *)构造string类,里面存放穿进来的字符串
string(size_t n,char ch)存放n个ch字符
string(const & s)拷贝构造空函数
#include<iostream>
#include<cstring>//c语言中string库
#include<string>//c++中的string库
using namespace std;

int main()
{
	string s1;
	string s2("I am a good student");
	string s3(5, 'M');
	string s4(s2);
	cout << s1 << endl
		 << s2 << endl
		 << s3 << endl
		 << s4 << endl;
    system("pause");
    return 0;
}

在这里插入图片描述
2.string的容量操作

函数名称函数说明
size_t size()const求字符串长度
size_t length()const求字符串长度
size_t capacity()const求string容量
bool empty()const判断字符串是否为空串,是返回true,否返回false
void clear()清空字符串
void reserve(size_t)手动扩容
void resize(size_t n ,char ch)强制将字符长度改变到n个字节,剩余空间填充字符ch。注意:ch为缺省参数,缺省时为’\0’

2.1. szie 和 length
在这里插入图片描述

STL库中几乎所有类都有size,为了保持一致性,string也加入了size函数,size和length底层实现是一样的,但是size的出场率更高一些。

2.2.capacity 和 reserve
在这里插入图片描述

由此可见,capacity总是为16的倍数-1(长度大于capacity时自动扩容)。

在这里插入图片描述

reserve为手动扩容,但扩容规则还是按照默认扩容的规则:扩容后容量大小为16的倍数-1。

2.3 empty 和 clear
在这里插入图片描述

empty函数是判断字符串是否为空,为空返回1,否则返回0。

在这里插入图片描述

size函数将字串里的内容置为’\0’,并将size置为0,但不动capacity。

2.4 resize
在这里插入图片描述

可随意改变字符串的size,扩展的空间用’\0’填入。 注意:若size大于capacity时,调用reserve扩容。

在这里插入图片描述

也可将size缩短,截取源字符串size个字节。

3. string类对象的访问操

函数名称函数说明
char &operator[](size_t pos)返回字符串中pos位置的的字符 ,const string 对象调用
const char &operator[](size_t pos)const返回字符串中pos位置的的字符 ,非const string 对象调用

在这里插入图片描述
4.string对象内容修改操作

函数名称功能说明
void push_back(char ch)字符串后追加字符ch
string &append(const char *str)字符串后追加一个字符串str
string &append(const string &str)字符串后追加一个对象str
string &operator +=(const char ch)字符串后追加一个字符ch
string &operator +=(const string &str)字符串后追加一个字符串str
string &operator +=(const string &str)字符串后追加一个对象str
const char *c_str()const返回c格式字符串
size_t find (char ch, size_t pos = 0) const从字符pos位置开始找字符ch,返回该字符的位置
size_t rfind (char ch, size_t pos = npos) const从字符pos位置开始找字符ch,返回该字符的位置
string substr ( size_t pos = 0,size_t n = npos) const从字符pos位置开始找字符ch,截断n个字符,返回该字符的位置

4.1 push_back
在这里插入图片描述

注意:push_back参数列表只能为char型。

在这里插入图片描述4.2 append
在这里插入图片描述在这里插入图片描述

注意:append参数列表只能是,char *或string&

4.3 +=的重载
在这里插入图片描述

总结:通过前面的对比,在对象字符串追加时,大家都能看到+=的功能包含了push_back和append的功能,而且书写也较便捷,代码易读性高,所以+=的方式更优一些,建议大家也使用这种方式操作。

4.4 c_str

前面我们介绍string是std库中封装的一个便于操作字符串的一个类,既然他是一个类,那他就有成员变量,成员函数。c_str函数就是返回这个对象中的存储字符串的成员变量。既然是这样,那么之前说到的size()函数和capacity()函数和c_str()函数一样,都是返回了这个对象中的存储字符长度和字符容量的成员变量。
在这里插入图片描述

4.5 find 、rfind和substr

size_t find(char ch ,size_t pos  = 0)

在这里插入图片描述

find函数为从pos位置开始往后找字符ch在字符串中的的位置,pos为缺省参数,当不传入时是默认为0,如果在字符串中从pos位置往后找不到字符ch则返回-1(按%d打印成了INT_MAX)。

size_t rfind(char ch, size_t pos = npos)

在这里插入图片描述

rfind函数为从pos位置开始往前找字符ch在字符串中的的位置,pos为缺省参数,当不传入时是默认为字符串的最后一个位置npos,如果在字符串中从pos位置往前找不到字符ch则返回-1(按%d打印成了INT_MAX)。

string substr(size_t pos = 0, size_t n = npos)const

在这里插入图片描述

substr函数是返回字符串中pos位置到n位置之间的元素。

注意:
1.pos和n都为缺省参数,不传入时,pos默认为0,n默认为最后一个位置npos。
2.pos若越界,无论前越还是后越,都将编译失败,抛出异常。
3.n若越界,无论前越还是后越,都处理为npos。

三、代码实现

代码实现过于庞大,此处就不一一列举,想要参考代码的可以进入下面的链接,在我的github里面取:https://github.com/adong001/Test/tree/master/C%2B%2B_Test0915

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值