C/C++笔记总结——string容器(各基本语法及其用法)

一、string基本概念

1.1本质

        string是C++风格的字符串,而string本质上是一个类。

1.2string和char*的区别

        char*是一个指针,string是一个类,类内部封装了char*,管理这个字符串,是一个char*类型的容器。

1.3特点

        string类内部封装了很多成员方法,例如:查找find,拷贝copy,删除delete,替换replace,插入insert等。

        string管理char*所分配的内存,不用担心赋值越界和取值越界等,由类内部进行负责。

二、基本语法

2.1初始化

string s1;            //创建一个空的字符串,无参构造

string str = "hello world";
string s2(str);       //有参构造

string s3(s2);        //把s2赋给s3,拷贝构造

string s4(10,'a');    //用10个字符a初始化字符串,是一个成员函数

2.2赋值操作

        这里把赋值的函数原型他们所实现的功能列表展示,但实际应用中他们应该用途不大,可以选择不看。后面会列举一些相对常用的函数的代码。

赋值操作
赋值函数原型实现的功能
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 str4;
str4.assign("hello world");

string str5;
str5.assign("hello world",5);         //把"hello world"的前5个字符赋给str5

string str6;
str6.assign(str5);                    //和string str6(str5)一个意思

string str7;
str7.assign(5,'x');                   //用5个x赋给str7

2.3查找和替换

        查找:查找指定字符串是否存在;

        替换:在指定的位置替换字符串。

        该部分内容还是比较重要的,在很多题目包括实际应用中都能用到。下面列出所有查找和替换的函数原型,并列举部分常用的代码。

查找和替换
函数原型实现的功能
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=0,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& replace(int pos,int n,const string& str)替换从pos开始n个字符为字符串str
string& replace(int pos,int n,const char* s)替换从pos开始的n个字符为字符串s

举例代码:

void text01() {
	//find
	string str1 = "abcdefgde";
	int pos = str1.find("de");		//返回de第一次出现的位置,如果没有de,就返回-1
	cout << "pos=" << pos << endl;	//pos=3

	//rfind
	//和find的区别在于rfind从右往左查找,find从左往右查找
	pos = str1.rfind("de");    //后面可以再加一个参数pos,表示从pos开始查找,不加默认从最右边开始查找
	cout << "pos=" << pos << endl;	//pos=7
}
//替换
void text02() {
	string str1 = "abcdefg";
	str1.replace(1, 3, "1111");		//从下标为1的元素开始,往后的3个元素替换为“1111”
	cout << "str1=" << str1 << endl;	//str1=a1111efg
}

2.4字符串的比较

        字符串的比较函数的返回值是int类型,相等返回 0 ,大于返回 1,小于返回 -1。

字符串的比较
函数原型实现的功能
int compare(const string &s) const与字符串s比较
int compare(const char *s) const与字符串s比较

举例代码:

void text03() {
	string str1 = "xello";
	string str2 = "hello";
	if (str1.compare(str2) == 0) {
		cout << "str1 = str2" << endl;
	}
	else if (str1.compare(str2) > 0) {
		cout << "str1 > str2" << endl;
	}
	else {
		cout << "str1 < str2" << endl;
	}
}

2.5插入和删除

插入和删除
函数原型实现的功能
string& insert(int pos,const char* s)插入字符串
string& insert(int pos,const string& str)插入字符串
string& insert(int pos,int n,char c)在指定位置插入n个字符c
string& erase(int pos,int n = npos)删除从pos开始的n个字符

举例代码:

//插入和删除
void text04() {
	//插入
	string str1 = "hello";
	str1.insert(1, "222");	//从下标为1的元素开始插入111
	cout << str1 << endl;	//h222ello
	//删除	
	str1.erase(1, 3);		//从下标为1的元素开始删除3个元素
	cout << str1 << endl;	//hello
}

2.6求子串

        功能:从字符串中获取想要的子串。

函数原型实现的功能
string substr(int pos = 0,int n = npos) const返回由pos开始的n个字符组成的字符串

举例代码:(包括如何在邮箱中截取账号)

//string求子串
void text05() {
	string str1 = "abcde";
	string sub = str1.substr(1, 3);		//下标为1,长度为3的子串,是bcd
	cout << sub << endl;

	//实际应用——在邮箱中截取账号
	string str2 = "123456789@qq.com";
	int pos = str2.find('@');	//找到@所在下标
	string sub2 = str2.substr(0, pos);		//从下标为0的位置开始截取长度为pos的字符串
	cout << sub2 << endl;
}

        以上就是我所总结的string容器基本语法及其用法的全部内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值