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

前言

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

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

find函数

引入

我们都知道,find函数可以是string类中,用于查找字符或者字符串的函数
也可以是,<algorithm>头文件中,的一种算法,用于在任何容器中,查找想要的元素,这个用法以后再说,下文只学习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<iostream>
#include<string>

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;
}

运行结果:
在这里插入图片描述

注意:
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<iostream>

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;
}

运行结果:
在这里插入图片描述

用法二:

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

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

下面给出一个例子:

#include<iostream>

using namespace std;

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

	return 0;
}

运行结果:
在这里插入图片描述

用法三:

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

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

下面给出一个例子:

#include<iostream>

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<iostream>

using namespace std;

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

	return 0;
}

运行结果:

在这里插入图片描述

compare

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

语法格式

str1.compare(str2);

通过字典序来比较

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

下面给出一个例子

#include<iostream>

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这些函数,希望对你有帮助

我们下篇文章见~

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1 正文 4 一、 C++string的使用 4 1.1 C++ string简介 4 1.2 string的成员 4 1.2.1 append 4 1.2.2 assign 5 1.2.3 at 5 1.2.4 begin 6 1.2.5 c_str 6 1.2.6 capacity 6 1.2.7 clear 7 1.2.8 compare 7 1.2.9 copy 7 1.2.10 _Copy_s 7 1.2.11 data 7 1.2.12 empty 7 1.2.13 end 7 1.2.14 erase 7 1.2.15 find 7 1.2.16 find_first_not_of 8 1.2.17 find_first_of 8 1.2.18 find_last_not_of 9 1.2.19 find_last_of 9 1.2.20 get_allocator 9 1.2.21 insert 9 1.2.22 length 9 1.2.23 max_size 9 1.2.24 push_back 9 1.2.25 rbegin 9 1.2.26 rend 9 1.2.27 replace 9 1.2.28 reserve 11 1.2.29 resize 12 1.2.30 rfind 12 1.2.31 size 12 1.2.32 substr 12 1.2.33 swap 12 1.3 string的构造 12 1.4 string的重载运算符 12 1.5 string与algorithm相结合的使用 13 1.5.1 string与remove 13 1.5.2 string与unique、sort 13 1.5.3 string与search 13 1.5.4 string和find、find_if 14 1.5.5 string与copy、copy_if 14 1.5.6 string与count、count_if 15 1.6 string与wstring 15 1.6.1 简介 15 1.6.2 wstring实例 15 1.6.3 wstring与控制台 16 1.6.4 string与wstring的相互转换 17 1.7 stringC++流 22 1.7.1 C++流简介 22 1.7.2 string与iostream、fstream 22 1.8 格式化字符串 23 1.8.1 简单常用的C方法 23 1.8.2 boost的方法 23 1.8.3 stlsoft + fastformat 23 1.9 string与CString 24 二、 boost字符串算法库 24 2.1 boost字符串算法库导论 24 2.1.1 boost.algorithm.string是什么? 24 2.1.2 相关 24 2.1.3 boost.range导论 24 2.1.4 boost.regex导论 24 2.1.5 boost.algorithm.string的DNA 24 2.2 boost字符串算法解密 24 2.2.1 修剪(trim.hpp) 24 2.2.2 转换(case_conv.hpp) 24 2.2.3 判断式、断言函数(predicate.hpp)【Predicates】 24 2.2.4 查找 24 2.2.5 删除和替换 24 2.2.6 分割和组合 24 2.2.7 分词 24 2.2.8 其它 24 三、 C字符串 24 3.1 C字符串常用算法 24 3.1.1 strcpy wcscpy 24 3.1.2 strcat wcscat 24 3.1.3 strchr wcschr 24 3.1.4 strcmp wcscmp 24 3.1.5 stricmp wcsicmp 24 3.1.6 strlen wcslen 24 3.1.7 strlwr/_strlwr wcslwr/_wcslwr 24 3.1.8 strncat wcsncat 24 3.1.9 strcspn wcscspn 24 3.1.10 strdup/_strdup wcsdup/_wcsdup 24 3.1.11 strncpy wcsncpy 24 3.1.12 strpbrk wcspbrk 24 3.1.13 strrev/_strrev wcsrev/_wcsrev 24 3.1.14 strset/_strset/_strset_l wcsset/_wcsset/_wcsset_l 24 3.1.15 strstr/wcsstr 24 3.1.16 strtok/wcstok 24 3.1.17 strupr/_strupr wcsupr/_wcsup

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值