C语言——字符串匹配法(BF算法)

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_53391957/article/details/118060383