C++重学(6)——string容器

string容器

概念

本质:类

和char* 的区别:string内部有个char*,并且封装了很多方法

迭代器类型:随机迭代器(可用于标准算法、支持[]访问、-n、比较大小)

常用方法

构造

方法作用
string();创建一个空字符串,如string str;
string(const char* s)使用字符串s初始化
string(const string& str)使用一个string对象初始化另一个string对象
string(int n ,char c)使用n个字符c初始化

请添加图片描述

	string str;
	const char* ch = "hello";
	string str2(ch);
	cout << "str2 = " << str2 << endl;

	string str3(str2);
	cout << "str3 = " << str3 << endl;

	string str4(5,'a');
	cout << "str4 = " << str4 << endl;

赋值

方法作用
string& operator=(const char* s)char*类型字符串赋值给当前字符串
string& operator=(const string &s)把字符串s赋值给当前的字符串
string& operator=(char c)字符赋值给当前字符串
string& assign(const char *s)把字符串s赋值给当前的字符串
string& assign(const char *s, int n)把字符串s的前n个字符赋值给当前的字符串
string& assign(const string &s)把字符串s赋值给当前的字符串
string& assign(int n , char c)用n个字符c赋值给当前的字符串

在这里插入图片描述

	//string& operator=(const char* s)	char*类型字符串赋值给当前字符串
	string str1;
	str1 = "hello";
	cout << "str1 = " << str1 << endl;

	//string& operator=(char c)	字符赋值给当前字符串
	string str2;
	str2 = 'c';
	cout << "str2 = " << str2 << endl;

	//string& operator=(const string &s)	把字符串s赋值给当前的字符串
	string str3;
	str3 = str2;
	cout << "str3 = " << str3 << endl;

	//string& assign(const char *s)	把字符串s赋值给当前的字符串
	string str4;
	str4.assign("hello");
	cout << "str4 = " << str4 << endl;

	//string& assign(const char *s, int n)	把字符串s的前n个字符赋值给当前的字符串
	string str5;
	str5.assign("hello world",8);
	cout << "str5 = " << str5 << endl;

	//string& assign(const string &s)	把字符串s赋值给当前的字符串
	string str6;
	str6.assign(str5);
	cout << "str6 = " << str6 << endl;

	//string& assign(int n, char c)	用n个字符c赋值给当前的字符串
	string str7;
	str7.assign(5,'a');
	cout << "str7 = " << str7 << endl;

拼接

方法作用
string& operator+=(const char* str)重载操作符 +=
string& operator+=(const string &str)重载操作符 +=
string& operator+=(char c)重载操作符 +=
string& append(const char *s)把字符串s追加到字符串结尾
string& append (const char *s, int n)把字符串s的前n个字符追加到字符串结尾
string& append (const string &s)同operator+=(const string &str)
string& append (const string &s , int pos , int n)字符串s中从pos开始的n个字符追加到字符串结尾

在这里插入图片描述

	//string& operator+=(const char* str)	重载操作符 +=
	string str1;
	str1 += "hello";
	cout << "str1 = " << str1 << endl;

	//string & operator+=(const string &str)	重载操作符 +=
	string str2;
	str2 += str1;
	cout << "str2 = " << str2 << endl;

	//string & operator+=(char c)	重载操作符 +=
	string str3;
	str3 += 'x';
	cout << "str3 = " << str3 << endl;

	//string & append(const char *s)	把字符串s追加到字符串结尾
	string str4;
	str4.append("hello");
	cout << "str4 = " << str4 << endl;

	//string& append(const char *s, int n)	把字符串s的前n个字符追加到字符串结尾
	string str5;
	str5.append("hello world",8);
	cout << "str5 = " << str5 << endl;

	//string& append(const string &s)	同operator += (const string &str)
	string str6;
	str6.append(str5);
	cout << "str6 = " << str6 << endl;

	//string& append(const string &s, int pos, int n)	字符串s中从pos开始的n个字符追加到字符串结尾
	string str7;
	str7.append(str6,0,5);
	cout << "str7 = " << str7 << endl;

截取

方法作用
string substr( int pos = 0 , int n = npos ) const返回由pos开始的n个字符组成的字符串

在这里插入图片描述

	string str("0123456789@qq.com");
	string PersonQQ = str.substr(0,str.find('@'));
	string Flag = str.substr(str.find('@') + 1, str.size());
	cout << "PersonQQ = " << PersonQQ << endl;
	cout << "Flag = " << Flag << endl;

插入、删除

方法作用
string& insert(int pos,const char* s);pos处插入字符
string& insert(int pos,const string& str);pos处插入字符串
string& insert(int pos,int n,char c);在指定位置插入n个字符c
string& erase(int pos, int n = npos);删除从Pos开始的n个字符

请添加图片描述

	string str("0123456");
	//string& insert(int pos, const char* s);	插入字符串
	str.insert(6, "7");
	cout << "str " << str << endl;

	//string& insert(int pos, int n, char c);	在指定位置插入n个字符c
	str.insert(8, 3,'a');
	cout << "str " << str << endl;

	//string& erase(int pos, int n = npos);	删除从Pos开始的n个字符
	str.erase(9, 2);
	cout << "str " << str << endl;

替换、查找

记法:find是从左到右的查找,而rfind是从右到左的查找

方法作用
int find(const string& str, int poS =0)const;查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0)const;查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;从pos查找s的前n个字符第一次位置
int find(const char c, int pos = 0)const;查找字符c第一次出现位置
int rfind(const string& str, int pos = npos ) const;查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos,int n) const;从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0)const;查找字符c最后一次出现位置

请添加图片描述

	string str("01234567890");

	//int find(const string& str, int poS = 0)const;查找str第一次出现位置, 从pos开始查找
	string str1 = "9";
	int index1 = str.find(str1, 0);
	cout << " find : index1 = " << index1 << endl;
	int index11 = str.find(str1, 0);
	cout << "rfind : index1 = " << index11 << endl;

	//int find(const char* s, int pos = 0)const;查找s第一次出现位置, 从pos开始查找
	int index2 = str.find("9", 5);
	cout << " find : index2 = " << index2 << endl;
	int index22 = str.find(str1, 0);
	cout << "rfind : index2 = " << index22 << endl;

	//int find(const char* s, int pos, int n) const;从pos位置 查找 s的前n个字符 第一次位置
	int index3 = str.find("6789", 2, 1);
	cout << " find : index3 = " << index3 << endl;
	int index33 = str.rfind("6789", 9, 1);
	cout << "rfind : index3 = " << index33 << endl;

	//int find(const char c, int pos = 0)const;	查找字符c第一次出现位置
	int index4 = str.find('8', 0);
	cout << " find : index4 = " << index4 << endl;
	int index44 = str.rfind('8',9);
	cout << "rfind : index4 = " << index44 << endl;

比较

原理 : 转成ASCII码进行比较的

方法作用
int compare(const string &s) const;比较字符串

返回值:

=0
>1
<-1

函数

方法作用
bool operator==(const char* str)重载操作符 +=
bool operator==(const string &str)重载操作符 +=

请添加图片描述

存取读写

注意:【】和at方法建议使用在数据的读取上而非存储!

方法作用
char& operator[](int n);通过[]方式存储
char& at(int n)通过at方法获取字符

请添加图片描述

string str1("hello");
	for (int i = 0; i < str1.size(); i++) 
	{
		cout << str1[i] << " ";
	}
	cout << endl;
	for (int i = 0; i < str1.size(); i++)
	{
		cout << str1.at(i) << " ";
	}
	cout << endl;
	str1[1] = 'w';
	str1.at(2) = 'h';
	cout << "str1 = " << str1 << endl;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值