串的简单模式匹配算法
代码
没几行
#include <iostream>
using namespace std;
typedef struct
{
char data[50];//存放串字符
int length;//存放串长
}SqString;//顺序串类型
void StrAssign(SqString &s,char cstr[])//生成串,s为引用型参数
{
int i;
for(i=0;cstr[i]!='\0';i++)
{
s.data[i]=cstr[i];
}
s.length=i;//设置串s的长度
}
void DispStr(SqString s)//输出串
{
int i;
if(s.length>0)
{
for(i=0;i<s.length;i++)
{
cout<<s.data[i];
}
cout<<endl;
}
}
int BF(SqString s,SqString t)//暴力匹配
{
int i=0,j=0;
while(i<s.length&&j<t.length)//同时满足时执行
{
if(s.data[i]==t.data[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=t.length)
return(i-t.length+1);//返回次序为下标+1
else
return(-1);
}
int main()
{
SqString S,T;//定义串
char s[]="abcaabbabcabaacbacba";//初始化s
char t[]="abcabaa";//初始化t
StrAssign(S,s);
StrAssign(T,t);
cout<<"主串为s:";
DispStr(S);
cout<<endl<<"模式串为t:";
DispStr(T);
cout<<endl<<"首次匹配的位置是:";
cout<<BF(S,T)<<endl;
return 0;
}
运行结果
最后没有释放串,不是什么都需要手动去释放( •̀ ω •́ )y,主函数里SqString S,T;去定义,并没有用顺序串指针,当超出起作用域时系统会自动释放