字符串暴力匹配算法
字符串暴力匹配算法
这里不是KMP算法,KMP算法等我研究透彻再发出来,,这个只是暴力破解,主串需要回溯,而KMP算法的主串是不需要回溯的。
KMP算法点击这里,KMP详解+实现代码
代码如下:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct
{
char *str; //str指向动态数组的首地址
int maxLength; //动态数组字符的最大个数
int length; //串的当前长度
}DString;
void Initiate(DString *S,int max,char *string)
{
int i;
S->str=(char *)malloc(sizeof(char)*max); //申请动态数组空间
S->maxLength=max;
S->length=strlen(string); //置串的当前长度值
for(i=0;i<S->length;i++)
S->str[i]=string[i]; //赋值
}
void Destroy(DString *s)
{
free(s->str);
s->maxLength=0;
s->length=0;
}
int BFIndex(DString S,int start,DString T)
{//查找主串S从start开始的子串T,成功则返回T在S中的首字符位置,失败则返回-1
int i=start,j=0,v;
while(i<S.length&&j<T.length)
{
if(S.str[i]==T.str[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j==T.length)
v=i-T.length;
else
v=-1;
return v;
}
int main()
{
DString mystring1,mystring2;
int max1=29,max2=9;
int pos=0;
Initiate(&mystring1,max1,"Data Structure Data Structure");
Initiate(&mystring2,max2,"Structure");
//第一次查找
pos=BFIndex(mystring1,pos,mystring2);
printf("第一次查找时 pos=%d\n",pos);
//第二次查找
pos=BFIndex(mystring1,pos+1,mystring2);
printf("第二次查找时 pos=%d\n",pos);
Destroy(&mystring1);
Destroy(&mystring2);
return 0;
}
运行结果(这里返回的是第一次出现的下标)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?