栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/729203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号