c++基础 STL 第二篇:(string容器)

一 string 的基本概念

  1. string 是 c++ 的字符串,本质是一个类;

  2. char* 是一个指针,而 string 是类, 类内封装 char*,管理 char*,使用 string 不用担心字符越界问题,因为这都是类内管理好的了。

二 string 的构造函数

在 string 类内有这几种构造函数,构造函数的目的就是给对象初始化

构造函数的原型功能
string( )初始化空串
string(const char* str)将字符串 str 初始化 string 的对象
string(const string& str)将 str 字符串对象拷贝给 string 的对象,也就是拷贝构造函数
string(int n,char c)将 n 个字符 c 拷贝给 string 对象

实例:

#include <string>
//string构造
void test01()
{
	string s1; //创建空字符串,调用无参构造函数
	cout << "str1 = " << s1 << endl;

	const char* str = "hello world";
	string s2(str); //等价 string s2("hello world")

	cout << "str2 = " << s2 << endl;

	string s3(s2); //调用拷贝构造函数
	cout << "str3 = " << s3 << endl;

	string s4(10, 'a');
	cout << "str3 = " << s3 << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

注意:string(int n,char c) c 是字符,不是字符串,写的时候是单引号,不是双引号,不然会报错;
在这里插入图片描述

三 string 的赋值操作

当对象被初始化后,我们也可以给对象重新的赋值一些新的值过去。

赋值操作的函数原型功能
string& operator=(const char* str)把 char* 类型的字符串赋值给 string 的对象
string& operator=(const string& str)把字符串 str 赋值给 string 的对象
string& operator=(char c)把字符 c 赋值给 string 的对象
string& assign(const char *str)把字符串 str 赋给 string 的对象
string& assign(const char *s, int n)取 字符串 str 中的 n 个字符赋值给 string 的对象
string& assign(const string &s)把 str 字符串对象赋值给string 的对象
string& assign(int n, char c)把 n 个字符 c 赋值给 string 的对象

实例:

//赋值
void test01()
{
	string str1;
	str1 = "hello world"; //string& operator=(const char* str)
	cout << "str1 = " << str1 << endl;

	string str2;
	str2 = str1; //string& operator=(const string& str)
	cout << "str2 = " << str2 << endl;

	string str3;
	str3 = 'a'; //string& operator=(char c)
	cout << "str3 = " << str3 << endl;

	string str4;
	str4.assign("hello c++");//string& assign(const char *str)
	cout << "str4 = " << str4 << endl;

	string str5;
	str5.assign("hello c++",5); //string& assign(const char *s, int n)
	cout << "str5 = " << str5 << endl;


	string str6;
	str6.assign(str5);
	cout << "str6 = " << str6 << endl;

	string str7;
	str7.assign(5, 'x'); //string& assign(int n, char c)
	cout << "str7 = " << str7 << endl;
}

int main() {

	test01();

	system("pause");

	return 0;
}

四 string 的字符串拼接操作

功能:将字符串追加拼接到自身字符串的尾部

函数的原型功能
string& opetator+=(const char* str)重载+=操作符,将 str 字符串拼接到 string 的对象尾部
string& operator+=(const char c)重载+=操作符,将字符c拼接到 string 的对象尾部
string& operator+=(const string& str)重载+=操作符,将 str字符串拼接到 string 的对象尾部
string& append(const char *str)把字符串 str 追加到 string 的对象尾部
string& append(const char *str, int n)把字符串str的前n个字符追加到string的对象的尾部
string& append(const string &str)等价 operator+=(const string& str)
string& append(const string &s, int pos, int n)字符串 str 从 pos 的位置开始截取 n 个字符追加到stringde 的对象尾部

注意:位置都是下标从0开始中文是占两个字符位置的,如果要从中文字符里追加字符的化,要注意一个汉字占两个位置。

实例:

//字符串拼接
void test01()
{
	string str1 = "我";                          

	str1 += "爱玩游戏";// string& opetator+=(const char* str)   
	//输出结果:我爱玩游戏
	cout << "str1 = " << str1 << endl;
	
	str1 += '。';// string& operator+=(const char c)     
	//输出结果:我爱玩游戏。
	cout << "str1 = " << str1 << endl;

	string str2 = "你爱玩什么?";
	
	str1 += str2;//string& operator+=(const string& str) 
	//输出结果:我爱玩游戏。你爱玩什么?
	cout << "str1 = " << str1 << endl;

	string str3 = "I";
	str3.append(" love ");//string& append(const char *str) 
	// 输出结果:I love
	cout<<str3<<endl;
	str3.append("game abcde", 4);//string& append(const char *str, int n)
	// 输出结果:I love game
	cout<<str3<<endl;                               
	//str3.append(str2);
	str3.append(str2, 4, 3); // 从下标4位置开始 ,截取3个字符,拼接到字符串末尾
	cout << "str3 = " << str3 << endl;
}

五 string 的查找和替换

注意:

  1. find查找是从左往后,rfind从右往左
  2. find找到字符串后返回查找的第一个字符位置,找不到返回-1
  3. replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串
函数的原型功能
int find(const string& str, int pos = 0) const查找str字符串第一次出现的位置,从string的对象中的第0个位置开始查找,找到返回下标,找不到返回-1
int find(const char* str, int pos = 0) const同上
int find(const char* str, int pos, int n) const从pos的位置开始查找前n个str
int rfind(const string& str, int pos = npos) const查找str最后一次位置,从pos开始查找,返回str的位置是从左边算起
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 test01()
{
	//查找
	string str1 = "abcdefgde";

	int pos = str1.find("de");
	//find常用的方式
	if (pos == -1)
	{
		cout << "未找到" << endl;
	}
	else
	{
		cout << "pos = " << pos << endl;
	}
	

	pos = str1.rfind("de");

	cout << "pos = " << pos << endl;

}

void test02()
{
	//替换
	string str1 = "abcdefgde";
	str1.replace(1, 3, "1111");

	cout << "str1 = " << str1 << endl;
}

六 string 的比较操作

字符串比较是按字符的ASCII码进行对比,比较英文字符串才有意义,比较中文没多大意义;
相等返回 0;大于返回 1;小于返回-1;使用时候通常用来判断两个字符串是否相等

函数原型功能
int compare(const string &s) const与字符串s比较
int compare(const char *s) const与字符串s比较
//字符串比较
void test01()
{

	string s1 = "hello";
	string s2 = "aello";

	int ret = s1.compare(s2);

	if (ret == 0) {
		cout << "s1 等于 s2" << endl;
	}
	else if (ret > 0)
	{
		cout << "s1 大于 s2" << endl;
	}
	else
	{
		cout << "s1 小于 s2" << endl;
	}

}

int main() {

	test01();

	system("pause");

	return 0;
}

七 string 的字符获取操作

函数原型功能
char& operator[](int n)重载[ ],获取第 n 个索引string 对象的字符
char& at(int n)同上功能

实例:

void test01()
{
	string str = "hello world";
	//size函数计算字符大小
	for (int i = 0; i < str.size(); i++)
	{	//char& operator[](int n)
		cout << str[i] << " ";//结果: hello world
	}
	cout << endl;

	for (int i = 0; i < str.size(); i++)
	{	//char& at(int n)
		cout << str.at(i) << " ";//结果: hello world
	}
	cout << endl;


	//字符修改
	str[0] = 'x';
	str.at(1) = 'x';
	cout << str << endl;// 结果:xxllo world
	
}

八 string 的插入和删除操作

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个字符

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

实例:

//字符串插入和删除
void test01()
{
	string str = "hello";
	//string& insert(int pos, const char* str)
	str.insert(1, "111");
	//输出结果:h111ello
	cout << str << endl;
	// string& erase(int pos, int n = npos)  
	str.erase(1, 3);  //从1号位置开始3个字符
	//输出结果:hello
	cout << str << endl;
}

九 string 的子串操作

功能:从字符串获取所需的子串

原型:string substr(int pos = 0, int n = npos) const; //从字符串开始获取n个字符

灵活的运用求子串功能,可以在实际开发中获取有效的信息
实例:

//子串
void test01()
{

	string str = "abcdefg";
	string subStr = str.substr(1, 3);
	//输出结果:subStr = bcd
	cout << "subStr = " << subStr << endl;

	string email = "hello@sina.com";
	int pos = email.find("@");
	string username = email.substr(0, pos);
	// 输出结果:usename = hello
	cout << "username: " << username << endl;

}

总结:
string 的操作远远不止这些,列出一些常用的,掌握的七七八八就可以啦,在有需求的时候不记得如何使用时候可以翻阅看一看,一看你就想起怎么用了,切记,不要死背,理解才是王道。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值