前言
上篇文章,我们学习了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这些函数,希望对你有帮助
我们下篇文章见~