BF字符匹配算法
运用暴力破解算法,首先考虑使用串的模式存放目标字符。
先要初始化目标串和模式串
再对二者进行暴力匹配
暴力匹配:对两者一一比较,相同则后移,不相同则回退
最终匹配成功将返回,模式串与目标串相匹配的前面字符的个数
否则返回-1
//字符匹配(顺序串)
#include<iostream>
#include<malloc.h>
using namespace std;
const int maxsize=50;
//声明串的类型
typedef struct
{
char data[maxsize];
int length;
} sqstring;
//初始化顺序串
void initstring(sqstring &s,char a[])
{
int i;
for(i=0;a[i]!='\0';i++)
{
s.data[i]=a[i];
}
s.length=i;
}
//BF模式匹配
int BF(sqstring s1,sqstring s2)
{
int i=0,j=0;
while(i<s1.length&&j<s2.length)
{//如果匹配则依次比较
if(s1.data[i]==s2.data[j])
i++,j++;
else
{//不匹配则回退
i=i-j+1;
j=0;
}
}
if(j>=s2.length)
return i-s2.length;
else
return -1;//不匹配则返回0
}
int main()
{
sqstring s1,s2;
char a1[maxsize],a2[maxsize];
cout<<"输入目标串: "<<endl;
cin>>a1;
cout<<"输入模式串: "<<endl;
cin>>a2;
initstring(s1,a1);
initstring(s2,a2);
cout<<BF(s1,s2)<<endl;
return 0;
}
输入:
abcdefg fg
输出:
5
输入目标串:
abcdefg
输入模式串:
fg
5
--------------------------------
Process exited after 8.319 seconds with return value 0
请按任意键继续. . .