简单字符串匹配 Brute

 /*

很简单  

简单的

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char s[]="abcdefghjkl";
char t[]="efghl";
int i,j;
while(s[i]!=''&&t[j]!='')
{
if(s[i]==t[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}

}
if(t[j]=='')
{printf("匹配成功");
return i-j+1;
}
else
{printf("匹配失败");
return 0;
}
}

模式匹配的Brute-Force算法

Brute-Force算法实现模式匹配的思想是:从主串s=”s0s1…sn-1”的第一个字符开始和模式串t=”t0t1…tn-1”的第一个字符比较,若相等,则继续比较后续字符;否则从主串s的第二个字符开始重新与模式串t的第一个字符比较。如此不断继续,若存在模式串中的每个字符依次和主串中的一个连续字符序列相等,则匹配成功,返回模式串t的第一个字符在主串中的下标;否则匹配失败,返回-1。

*/ 

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>

/*strlen原型:size_t strlen(
const char *str
);
*/

int len(char *t)
{
int i=0,j=0;
char *m;
for(m=t;t[i]!='';i++)
{
j++;
}
return j;
}
int brute(char * t,char * p)
{
int i=0,j=0;
int pos;
int lent=len(t);
int lenp=len(p);
//t[0]=lent;//类型不一致可能用到强制转换;
//p[0]=lenp;
while(t[i]!=''&&p[j]!='')
{
if(t[i]==p[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}

}

if(p[j]=='')
{
printf("成功! ");
return i-lenp;
}
else
{
printf("匹配失败");
return -1;
}
}
int main()
{
int i=1,j=1;
int lent,lenp,pos;
char *text="abcababeca";
char *patten="ababe";
/*要理解 你要知道 字符串 干什么了 双引号 做了3件事
1.申请了空间,存放了字符串
2. 在字符串尾加上了'/0'
3.返回地址
*/
// j=len(text);
// printf("字符串指针数组长度为:%d",j);

printf("%s " ,text);

printf("%s " ,patten);
pos=brute(text,patten);
printf("成功匹配的位置是:%d",pos);

return 0;
}

原文地址:https://www.cnblogs.com/mykonons/p/5883636.html