目录
子串的定位运算通常称为串的模式匹配或是串匹配。著名的算法有BF算法和KMP算法。
1.BF算法
1.1匹配过程:
如主串 S="ababcabcacbab"
模式串 T="abcac"
要有一个 stand 值记录 i 开始循环的位置,比如说一开始 stand=i=1;然后 如果 i和 j相应位置上的字符相同,则 i和 j 要进行自增,即都往后移一位,直到失配( i 和 j 相对应的字符不相同),此时,j=1,i=stand+1;然后再此进行匹配,直到找到模式串或者 i > S.length(即找不到)就会退出。
1.2直接使用string方法编写BF算法:
编译器:Code::Blocks 20.03
/*
BF算法(C++)
题目:在主串S中找模式串T,找到则返回模式串T在S中第pos个字符开始第一次出现的位置,否则返回0
*/
#include<iostream>
using namespace std;
int Index_BF(string S,string T,int pos)
{
if( pos<1 || pos>S.length() )
{
cout<<"pos位置不合法"<<endl;
return 0;//pos值不合法
}
int i=--pos,j=0;
while(i<S.length()&&j<T.length()){
if(S[i]==T[j]){
++i;++j;
}
else{
i=++pos;
j=0;
}
}
if(j>=T.length()) return pos+1;
else {
cout<<"匹配失败,在主串的特定位置中没有找到该模式串"<<endl;
return 0;
}
}
int main()
{
int pos,p; //从第pos个位置开始查找模式串
string S,T;
cin>>S>>T>>pos;
p= Index_BF(S,T,pos);
if(p!=0) cout<<"模式串出现的位置是:"<<p<<endl;
return 0;
}
运行截图: