C++知识小屋(4):STL——string常见函数小结

       STL在C++中起到非常重要的作用,最大的好处就是将常见的数据结构进行了封装,使得我们不需要从底层一步步去实现,使用起来非常方便。C++知识小屋🏠的STL系列旨在将常见STL库的常见函数进行小结,以函数+示例+结果展示的方式作为文章的整体结构。希望能够在用到这些库的时候能够快速上手,熟练地使用它们来解决一些常见的问题。

string

string字符串可以说是C++最常用的STL,其内部包含了非常多的函数,本文列举了最常见的功能:赋值,截取子串,增删改查。
使用string前需要先导入string的库:

#include <string>

string的赋值函数assign

       如果要将字符串A赋值给B,可以直接使用 “=” 符号的方式,也可以使用assign的方式。
       其中assign的方式还可以截取A中的某个字串赋值给B,比如下面的最后的一个例子

	string A = "abcdef";
	cout << A << endl;		//"abcdef"
		
	string B;	
	B = A;					//使用运算符进行赋值 
	cout << B << endl;		//"abcdef" 
	
	B.assign(A);			//将A字符串赋值给B
	cout << B << endl;		//"abcdef" 
	
	B.assign(A,2,4);		//将A字符串的第3字符(c)开始的4个字符赋值给B
	cout << B << endl; 		//"cdef" 

string的拼接

  • string相比于char*的一个最大的优势就是重载了常见的运算符,比如+=(拼接两个字符串),>,<,=(比较两个字符串的大小)。下面介绍了拼接字符串的两个方法:
    • 使用+=的方法将A字符串拼接在D的后面
    • 使用append(string a)函数进行拼接 :表示在原来字符串的末尾加上a字符串
	string A = "abcdef";
	cout << A << endl;		//"abcdef"
		
	//字符串拼接						
	string D = "AAAB";
	D += A;
	cout << D << endl;		//"AAABabcdef"
	
	//等同于 += 
	string E = "AAAB";
	E.append(A);
	cout << E << endl;		//"AAABabcdef"

string的查找

如果我们想在字符串中找到某个元素出现的位置,就可以用下面的方式:
比如我们想要在字符串E中寻找A第一次出现的位置,可以用find的方式和find_first_of()的方式

  • E.find(‘A’,0) 表示从E中寻找A字符,0表示是从第零个位置开始往后找,即从头开始,这个0也可省去。

如果我们想找A在E中出现的最后一个位置,可从后往前寻找,使用rfind()函数和find_last_of()的方式

  • E.rfind(‘A’) 表示从E中从后开始寻找A字符第一次出现的位置,由于对于E字符串可看到’A’最后一次出现的位置是在第三位,所以返回2(下标是从0开始计算的)
	string E = "AAABabcdef";
	cout << E << endl;		//"AAABabcdef"
	
	//从前往后找某个元素第一次出现的位置,若没有,返回-1 
	int a = E.find('A',0);
	cout << a << endl;		// 0
	
	//从后往前找某个元素第一次出现的位置,若没有,返回-1 
	int b = E.rfind('A');
	cout << b << endl;		// 2
	
	//寻找某个元素第一次出现的位置,等效于find 
	int c =E.find_first_of('A');
	cout << c << endl; 		// 0
	
	//寻找某个元素最后一次出现的位置,等效于rfind 
	int e = E.find_last_of('A');
	cout << e << endl;		// 2

substr函数截取字符串子串

如果我们想获取一个字符串的中间的某个部分,可使用substr函数:
substr(int a,int b):获取字符串从第a个位置开始往后的b个字符。

	//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890” 
	string F;
	F = "123456";
	cout << F << endl;
	
	//子串: (从第零个位置开始截取四个字符) 
	cout << F.substr(0,4) << endl;		//1234 

string的修改,插入,删除

  • replace(int a,int b,string c)函数为字符串的替代修改函数,可将字符串的第a个位置开始往后的b个字符用c字符串来填补,比如下面例子中将字符串的前三个字符"123"用"7890"进行了替代。
  • insert(int a,string b)函数为插入函数,可在字符串的第a个位置前面插入b字符串。
  • erase(int a,int b)函数为删除函数,可将字符串的第a个位置开始往后的b个字符进行删除。
  • 下面是一个栗子,将三个功能进行了整合:
    • 需要注意的是,对于F字符串,其会随着每一个函数的进行而发生改变,比如进行了replace操作后的F字符串已经发生了改变,此时进行insert操作的时候拿的是replace之后的F字符串进行操作,而不是最开始的F字符串。
	string F;
	F = "123456";
	cout << F << endl;
	
	//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890” 
	F.replace(0,3,"7890");
	cout << F << endl;		// "7890456" 
	
	//从第零个位置开始插入"666" 
	F.insert(0,"666");
	cout << F << endl; 		// "6667890456"
	
	//从第零个位置开始删除三个元素 
	F.erase(0,3);
	cout << F << endl;		// "7890456" 

完整程序

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string A = "abcdef";
	cout << A << endl;		//"abcdef"
		
	string B;	
	B = A;					//使用运算符进行赋值 
	cout << B << endl;		//"abcdef" 
	
	B.assign(A);			//将A字符串赋值给B
	cout << B << endl;		//"abcdef" 
	
	B.assign(A,2,4);		//将A字符串的第3字符(c)开始的4个字符赋值给B
	cout << B << endl; 		//"cdef" 
	
		
	//字符串拼接						
	string D = "AAAB";
	D += A;
	cout << D << endl;		//"AAABabcdef"
	
	//等同于 += 
	string E = "AAAB";
	E.append(A);
	cout << E << endl;		//"AAABabcdef"
	
	//从前往后找某个元素第一次出现的位置,若没有,返回-1 
	int a = E.find('A',0);
	cout << a << endl;		// 0
	
	//从后往前找某个元素第一次出现的位置,若没有,返回-1 
	int b = E.rfind('A');
	cout << b << endl;		// 2
	
	//寻找某个元素第一次出现的位置,等效于find 
	int c =E.find_first_of('A');
	cout << c << endl; 		// 0
	
	//寻找某个元素最后一次出现的位置,等效于rfind 
	int e = E.find_last_of('A');
	cout << e << endl;		// 2
	
	//F.replace(0,3,"7890"):从第零个位置开始的三个字符替换成“7890” 
	string F;
	F = "123456";
	cout << F << endl;
	
	//子串: (从第零个位置开始截取四个字符) 
	cout << F.substr(0,4) << endl;		//1234 
	
	F.replace(0,3,"7890");
	cout << F << endl;		// "7890456" 
	
	//从第零个位置开始插入"666" 
	F.insert(0,"666");
	cout << F << endl; 		// "6667890456"
	
	//从第零个位置开始删除三个元素 
	F.erase(0,3);
	cout << F << endl;		// "7890456" 
	
	return 0;
 } 

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值