当我们要在stirng中匹配所有子串时,用find成员函数非常的方便。不用像c一样,用那个超级难的KMP算法和BF算法。哈哈,虽然难,但是想起以前自己学数据结构的那股感觉,心里还是会感到欣慰。
好,说正题,代码如下:
#include "pch.h"
#include <iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
//string 搜索操作
string a = "lyyyouqianrenlyylyy";
//可以通过循环的方式来遍历整个串,匹配所有相同的串,或者记录下所有下标位置
vector<int> k; //用来记录相同串出现的下标位置
string h = "lyy";
string::size_type j = 0;
while (j != string::npos) {
j = a.find(h,j);
if (j == string::npos)
break;
k.push_back(j);
j += h.size();
}
for (auto a : k)
cout << a << " ";
cout << endl;
}
这样的话,我们就可以将所有子串的位置匹配到。当然,我们也可以在匹配到的同时,将其替换成其他子串。
代码如下:
#include "pch.h"
#include <iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
//string 搜索操作
string a = "lyyyouqianrenlyylyy";
//可以通过循环的方式来遍历整个串,匹配所有相同的串并且可以进行替换,或者记录下所有下标位置
vector<int> k; //用来记录相同串出现的下标位置
string h = "lyy";
string i = "luoyuanyi";
string::size_type j = 0;
while (j != string::npos) {
j = a.find(h,j);
if (j == string::npos)
break;
k.push_back(j);
a.replace(j, h.size(), i);
j += i.size();
}
for (auto a : k)
cout << a << " ";
cout << endl;
cout << a << endl;
}
执行结果如下: