【string类】

一:标准库中的string类

1.1string类

1.字符串时表示字符序列的类。

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

3.string在底层实际是:basic_string类模板的别名,

typedef basic_string<char, char_traits, allocator> string

4.不能操作多字节或者边长字符的序列。

使用string类时,必须包含#include<string>头文件。

1.2常见的string类接口

1.string类对象的常见构造

函数名称

功能

string()

构造空的string类对象,即空字符串

string(const char* s) 

用C-string来构造string类对象

string(size_t n,char c)

string类对象包含n个字符c

string(const string& s)

构造拷贝函数

string(const string& str,size_pos,size_t len = npos)

获取字符串中pos位置后的n个字符

string(const char* s, size_t n)

截取字符串pos后的所有字符

示例:

补充:string类初始化

2遍历字符串的方法

  • 下标+[]
  • 迭代器
  • 范围for

什么是迭代器:像指针一样的东西或者就是指针。

范围for本质上还是迭代器。

举例:

3.string类对象的容量操作

函数名称

功能

size

返回字符串有效字符长度

length

返回字符串有效字符长度

capacity

返回空间总大小

empty

检测字符串是否为空串,是返回true,否返回false

clear

清空有效字符

reserve

为字符串预留空间

resize

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

示例:

可以看出size的大小和capacity并不相同。

对比reserve 和 resize

reserve:

resize:

补充:

注意:

1.size()与length()底层实现原理相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下都用size()

2.clear()只是将string中有效字符清空,不改变底层空间大小。

3.resize(size_t n)与resize(size_t char c)都是讲字符串中有效字符个数改到n个,不同的是:resize(n)用0填补多出的元素空间,而resize用char c 来改变多出的元素空间。注意:rize(n)在改变元素个数时,如果将元素个数增多,可能会改变底层容量的大小,如果是元素个数减少,底层空间总大小不变。

4.reserve(size_t res_arg=0):为string渔猎空间,不改变有效元素的个数每当reverse参数小于string的底层空间访问总大小时,reverse不会改变容量大小。

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

函数名称

功能说明

operator[]

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

begin+end

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

rbegin+rend

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

范围for

C++更新的更简洁的遍历方式

举例:

4.string类对象的修改操作

函数名称

功能

push_back

在字符串后尾插字符c

append

在字符串后追加一个字符串

operator+=

在字符串后追加字符串str

c_str

返回c格式的字符串

find+npos

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

rfind

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

substr

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

举例:

注意:string类后追加字符时,push_back/append/+=实现方式差不多,一般境况下多选+=,因为+=可以追加字符,也可以追加字符串。

2.string操作时,可以考虑通过reserve把空间预留好。

5.string类非成员函数

函数

功能

operator+

少用,传值返回,导致深拷贝效率低

operator>>

输入运算符重载

operator<<

输出与算符重载

getline

获取一行字符串

relational operators

大小比较

值得注意的是,getline遇到'\n'才结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值