c++primer学习笔记 string的一些额外操作

本文详细介绍了C++标准库中的string类,包括其构造方法、substr操作、insert和erase函数、append和replace函数,以及搜索和compare操作。通过具体示例展示了如何使用这些功能来高效地操作字符串。

1.string除了与其他顺序容器相同的构造函数,还额外支持另外三个构造函数。

构造string的方法
string s(cp, n)s是cp指向的数组中前n个字符的拷贝。此数组至少应该包含n个字符
string s(s2,pos2)s是string s2从下标pos2 开始的字符的拷贝。若pos2>s2.size(),则此类行为未定义
string s(s2,pos2,len2)s是string s2从下标开始len2个字符的拷贝,若pos2>s2.size(),构造函数的行为未定义。不管len2的值是多少,构造函数至多拷贝s2.size()-pos2个字符

以上的构造函数接收string或者const char*参数,还接收指定拷贝多少个字符的参数。
2.substr操作,返回一个string,是原始string的一部分或者全部拷贝。可以传递给substr一个可选的位置和计数值:

substr(pos, n);//返回一个string,包含s中从pos开始的n个字符的拷贝。
//pos的默认值为0.n的默认值为是s.size()-pos,即拷贝从pos开始的所有字符。	

string除了接收迭代器的insert和erase版本外,string还提供了接收下标的版本。下标指出了开始删除的位置,获知是insert到给定值之前的位置

s.insert(s.size(),5,'!');//在s末尾插入5个感叹号
s.erase(s.size()-5,5);//从s末尾删除最后五个字符

3.标准库string类型还提供了接收c风格字符串数组的insert和assign版本。
例如:

const char *cp = "Stately, plump Buck";
s.assign(cp, 7);//s=="stately"
s.insert(s.size(),cp+7);//s=="Statelu, plump Buck";

首先调用assign替换s的内容,赋予s的是从cp指向的地址开始的7个字符。要求赋值的字符数必须小于等于cp指向的数组中的字符数。
4.append和replace函数
string类定义了两个额外的成员函数:append和replace,这两个函数可以改变string的内容。

修改string的操作
s.insert(pos,args)在pos之前插入args指定的字符。pos可以是一个下标或者一个迭代器。接收下标版 返回指向s的引用,而接收迭代器版本返回第一个插入字符 的迭代器
s.erase(pos,len)删除从位置pos开始的len个字符。如果len被省略,则删除从pos开始直至s末尾的所有字符。返回一个指向s的引用
s.assign(args)将s中的字符串替换为args。返回一个指向s的引用
s.append(args)将args追加到s。返回一个指向s的引用
s.replace(range,args)删除s中范围range内的字符,替换为args指定的字符。range或者是一个下标和一个长度,或者是一对指向s的迭代器,返回指向s的引用

5.string搜索操作
搜索操作返回指定字符出现的下标,如果未找到则返回npos

string搜索操作
s.find(args)查找s中args第一次出现的位置
s.rfind(args)查找s中args最后一次出现的位置(其实是从后往前找)
s.find_first_of(args)查找s中args中任何一个字符第一次出现的位置
s.find_last_of(args)查找s中args任何一个字符最后一次出现的位置
s.find_first_not_of(args)查找s中第一个不在args中的字符
s.find_last_not_of(args)在s中查找最后一个不在args中的字符
args必须是以下的形式之一
c,pos从s中位置pos开始查找字符c,pos默认为0
s2,pos从s中位置pos开始查找字符串s2。pos默认为0
cp,pos从s中位置pos开始查找指针cp指向的以空字符结尾的c风格字符串
cp,pos,n从s中位置pos开始查找指针cp指向的数组的前n个字符。pos和n无默认值

6.compare函数

s.compare的几种参数形式
s2比较s和s2
pos1,n1,s2将s中从pos1开始的n1个字符与s2进行比较
pos1,n1,s2,pos2,n2将s中从pos1开始的n1个字符与s2中从pos2开始的n2个字符进行比较
cp比较s与cp指向的以空字符结尾的字符数组
pos1,n1,cp将s中以pos1开始的n1个字符与cp指向的空字符结尾的c风格字符数组进行比较
pos1,n1,cp,n2将s中从pos1开始的n1个字符与指针cp指向的地址开始的n2个字符进行比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值