9.5 额外的string操作


部分前提在 string

构造string的其他方法

除了之前链接介绍的string构造方法,还有几种需要介绍一下:

n len pos 都是无符号整数
构造方法说明
string s(cp,n)s是指向cp当中前n个字符的拷贝,也就是说,cp至少n个字符 ,注意cp是指针,指向的是字符数组,给出的n如果大于size,那么将发出out_of_range的异常
string s(s2,pos)s2为string类型,从下标pos开始拷贝至空字符结束
string s(s2,pos,len)s2为string类型,从下标pos开始拷贝len长度结束
  1. 注意如果不添加数字,那么都是从头开始直到遇到空字符结尾,如果该字符串不存在空字符将发生未定义的错误。

substr操作

substr操作返回一个string,它是原始string的一部分或全部的拷贝。可以传递给substr一个可选的开始位置和计数值。

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

string s = "hello world";
string s2 = s.substr(0,5);//s2 = "hello"
string s3 = s.substr(6);//s3 = "world"
string s4 = s.substr(6,11);//s4 = "world"
string s5 = s.substr(12);//out_of_range

assign

由于之前介绍过,这边只是提一嘴:

//使用替换函数进行赋值
s.assign(4,'h');//hhhh
s.assign(s.begin(),s.begin()+1);//h

改变string的其他方法

  1. 顺序容器常规操作
  2. insert和erase除迭代器(也就是顺序容器的操作)外接受下标位置定位,insert支持插入C风格字符数组以及字符串。
//insert
s.insert(s.size(),5,'!');//在s字符串最后面加上5个!
s.insert(0,s2,0,s2.size());//在s字符串中从s[0]位置开始插入s2的从s2[0]开始的长度为s2.size()的字符串。

//erase
s.erase(s.size()-5,5);//删除s字符串最后面5个字符。

//append
c.append(str); //字符串末尾插入

//replace
c.replace(pos,n,str);//将下标位置处开始的n个字符串替换为str

string的搜索操作

  1. 6个搜索函数,4个重载版本
  2. 成功返回string::size_type值,失败返回string::npos静态成员,npos的默认初始值为-1,但是其类型是static const string::size_type类型,所以其值代表着string的最大的可能大小。
  3. 注意,last相关查找是从后往前,pos位置写的是起始位置,如果找0到10内是否有字符串,pos = 10。
  4. find()查找第一次出现的目标字符串(全匹配)
  5. find_first_of() 查找子串中的某个字符最先出现的位置(非全匹配)
  6. find_last_of() 这个函数与find_first_of()功能差不多,只不过find_first_of()是从字符串的前面往后面搜索,而find_last_of()是从字符串的后面往前面搜索(非全匹配)
  7. rfind() 反向查找字符串,即找到最后一个与子串匹配的位置(全匹配)(从前往后搜索)
  8. find_first_not_of() 找到第一个不与子串匹配的位置(非全匹配)
函数说明
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格式的字符数组,pos默认值为0
cp,pos,n从s中的pos位置开始寻找cp指针指向的c格式的字符数组的前n位,pos和n没有默认值

给个样例辅助理解:

	string s = "yhhdyzwhhhhhdy!";
	string s2 = "zwhy";
	char cstr[] = "dy";
	vector<string::size_type> i(7,0);
	i[0]= s.find("hhdy");//字符串第一次出现的位置,返回1
	i[1] = s.find("zwhy");//找不到,返回npos
	i[2] = s.rfind(cstr);//dy最后一次出现位置,返回12,注意不是反向寻找
	i[3] = s.find_first_of("dy", 5);//dy在s[5]之后第一次出现的位置,返回12
	i[4] = s.find_last_of(cstr, 0, 1);//返回npos,因为last相关是从后往前查找,pos = 0,从0查到0
	i[5] = s.find_first_not_of("hdy");//第一次不出现“hdy”中字符的位置,返回5(z)
	i[6] = s.find_last_not_of("hdy");//最后一次不出现“hdy”中字符的位置,返回14(!)
	const char cstr1[] = "hdy";
	i[7] = s.find_last_of(cstr1,14,1); //返回11

compare函数

//具体用法:s.compare(参数)
//compare内部的参数
//()内可省略
(pos1,n1),s2,(pos2,n2)//string类型s2,将从s当中的pos1开始的n1个字符与s2当中从pos2开始的n2个字符进行比较。
(pos1,n1),cp,(n2)//字符数组指针cp,将从s当中的pos1开始的n1个字符与cp指向的地址开始的n2个连续字符组成的c字符串数组进行比较。

数值转换

to_string(val) //val是任意算术类型,将val转换成字符串。

//string转换为int、long、unsignedlong、longlong、unsignedlonglong
//p为s下标,即从哪里开始,默认0,b为基数(默认10)即转化为十进制。
stoi(s,p,b)//string转化为int
stol(s,p,b)//string转化为long
stoul(s,p,b)//string转化为unsigned long
stoll(s,p,b)//string转化为long long
stoull(s,p,b)//string转化为unsigned long long

//string转换为float、double、long double
stof(s,p)//string转化为float
stod(s,p)//string转化为double
stold(s,p)//string转化为long double

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值