【C++】string 之 find、rfind、replace、compare函数的学习

前言

上篇文章,我们学习了assign、at、append这三个函数

今天,我们来学习find、 函数

find函数

引入

我们都知道,find函数可以是string类中,用于查找字符或者字符串的函数
也可以是,头文件中,的一种算法,用于在任何容器中,查找想要的元素,这个用法以后再说,下文只学习find函数是如何在字符串中查找字符的

函数形式

size_t find(const string& str, size_t pos = 0)const;
size_t find(const char* s, size_t pos = 0)const;
size_t find(const char* s, size_t pos, size_t n)const;
size_t find(char c, size_t pos = 0)const;

使用方式

str.find("xx");

str是要查找的字符串、xx是要查找的内容

返回值

如果查找成功,find()函数返回子串或字符在字符串中第一次出现的位置,字符串第一个字符下标是0;否则,返回一个特殊值string::npos表示查找失败

在C++中,npos是一个特殊的无符号整数值,表示一个不可能的位置或大小。它的值是最大的可能大小,即size_t(-1)
要是转换成有符号整型输出,结果就是-1

使用例子

下面给出一个例子,方便大家理解

#include
#include

using namespace std;

int main()
{
	string str = "hello,world";

	cout << str.find("world") << endl;
	cout << str.find("w") << endl;
	cout << str.find("a") << endl;
	cout << (int)str.find("a") << endl;

	return 0;
}

运行结果:
【C++】string 之 find、rfind、replace、compare函数的学习_第1张图片

注意:
find函数只能查找子串在字符串中第一次出现的位置,如果想多次查找,可以通过循环结构和改变find函数的第二个参数起始位置:pos(pos默认为0,即第一个元素)来实现

rfind函数

接下来,我们来学习rfind函数,
rfind函数和find函数很像,只不过find函数是从第一个元素开始查找,rfind函数是从最后一个

逆向查找字符或字符串,若查找成功,则返回逆向查到的第一个字符下标或第一个字符串首字符的下标;若查找失败,无法返回正确的下标。
逆向查到的第一个字符或第一个字符串也就是正向的最后一个。rfind()函数的返回值为无符号整数类型。

replace函数

不做详细介绍 只介绍一下它的基本功能和给出一个使用示例

replace虽然使用的时候有一些局限性(即不能超出原字符串的大小) 但功能还是很多的

基本功能

replace意思是替换 即将字符串中的某些字符替换成其他的字符

语法格式

用法一:

三个参数:
第一个是下标pos 寻找的字符的位置
第二个是整型数据n 即从pos开始向后修改几个字符
第三个是字符串str1

这种用法就是:
将pos后面n个字符修改为str1中的字符

也可以理解为
replace函数先将pos后的n个字符截取掉
再将str1放在pos后面

#include

using namespace std;

int main()
{
	string str = "Hello World";
	str = str.replace(str.find("o"), 2, "X");
	cout << str << endl;

	str = "Hello World";
	str = str.replace(str.find("o"), 1, "XXXX");
	cout << str << endl;

	str = "Hello World";
	str = str.replace(str.find("o"), 2, "XXXX");
	cout << str << endl;

	return 0;
}

运行结果:
【C++】string 之 find、rfind、replace、compare函数的学习_第2张图片

用法二:

三个参数:
起始位置pos1,即从pos1开始替换
终止位置pos2,到pos2停止替换
字符串str1,用str1进行替换

这种用法:
从pos1到pos2的所有字符,替换成字符串str1

下面给出一个例子:

#include

using namespace std;

int main()
{
	string str = "Hello world";
	str = str.replace(str.begin(), str.begin() + 3, "hddddddd");
	cout << str;

	return 0;
}

运行结果:
【C++】string 之 find、rfind、replace、compare函数的学习_第3张图片

用法三:

五个参数:
pos1,原字符串的起始替换位置
pos2,原字符串的替换终止位置
str1,要替换的字符串
pos3,str1的起始位置
n,从pos3开始替换n个字符

这种用法就是将原字符串中从pos1到pos2的所有字符替换成str1中从pos3开始的n个字符

下面给出一个例子:

#include

using namespace std;

int main()
{
	string str = "Hello world";
	string str1 = "nice to meet you";

	str = str.replace(0, 3, str1, str1.find("c"), 3);
	cout << str << endl;

	return 0;
}

用法四

四个参数:
pos1,替换的开始位置
pos2,替换的结束位置
n,替换的个数
ch,要进行替换的字符

作用就是:
将str中从pos1 到pos2的子串替换为n个ch

下面给出一个例子:

#include

using namespace std;

int main()
{
	string str = "Hello wolrd";
	char ch = '#';
	str = str.replace(0, 5, 3, ch);
	cout << str << endl;

	return 0;
}

运行结果:

【C++】string 之 find、rfind、replace、compare函数的学习_第4张图片

compare

这个函数的作用就是比较两个字符串是否相等

语法格式

str1.compare(str2);

通过字典序来比较

str1大就返回一个大于0的数
不然就返回一个小于0的数

下面给出一个例子

#include

using namespace std;

int main()
{
	string str1 = "Hello";
	string str2 = "world";

	int ret = str1.compare(str2);

	if (ret == 0)
	{
		cout << "==" << endl;
	}
	else if (ret > 0)
	{
		cout << ">" << endl;
	}
	else
	{
		cout << "<" << endl;
	}

	return 0;
}

结语

本篇文章介绍了find、rfind、replace、compare这些函数,希望对你有帮助

我们下篇文章见~

你可能感兴趣的:(C++知识点,c++,学习,开发语言)