BF算法(朴素算法):
说明如下如所示:
实现效果如图:
源码如下:
#include<stdio.h>
#include<stdlib.h>
//结构体
typedef struct String
{
char* data;//字符串
int len;//长度
}String;
//初始化字符串链表
String* initString()
{
String* s=(String*)malloc(sizeof(String));
s->data=NULL;
s->len=0;
return s;
}
//分配字符串
void stringAssign(String* s,char* data)
{
int i=0;
if(s->data)//防止野生指针
{
free(s->data);
}
int len=0;
char* temp=data;
while(*temp)
{
len++;
temp++;
}
if(len==0)
{
s->data=NULL;
s->len=0;
}
else
{
temp=data;
s->len=len;
s->data=(char*)malloc(sizeof(char)*(len+1));
for(i=0;i<len;i++,temp++)
{
s->data[i]=*temp;
}
}
}
//打印字符串
void printString(String* s)
{
int i=0;
for(i=0;i<s->len;i++)
{
printf("%c",s->data[i]);
}
printf("\n");
}
//BF匹配字符串
void forceMatch(String* master,String* sub)
{
int i=0;
int j=0;
while(i<master->len && j<sub->len)
{
if(master->data[i] == sub->data[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j == sub->len)
{
printf("force match success.\n");
}
else
printf("force match fail.\n");
}
int main(int argc,char* argv[])
{
String* s=initString();
String* s1=initString();
stringAssign(s,"Hello");
stringAssign(s1,"He");
//stringAssign(s,argv[1]);
//stringAssign(s1,argv[2]);
printString(s);
printString(s1);
forceMatch(s,s1);
return 0;
}