模式匹配KMP算法
来源:互联网 发布:炒沥青怎么看金十数据 编辑:程序博客网 时间:2024/06/06 00:23
拿起以前上过的数据结构看,看到第四章串的模式匹配时,颇感兴趣,就写了一下程序,实践了一下。感觉还蛮爽,于是就把以下几个重要的函数放在此处,以便后面查看和园友学习。
typedef char SString[MAX_STR_LEN + 1];//0号单元存放串的长度,可以存储的数字为-128----127
没有改进的模式匹配算法
int Index(SString S,SString T,int pos)
{
int i=pos,j=1;
while(i<=S[0]&&j<=T[0])
{
if(S[i]==T[j])
{
++i;++j;//继续往后比较
}
else{i=i-j+2;j=1;}//指针后退重新匹配
}
if(j>T[0])
{ return i-T[0]; }
else return 0;
} //end of Index
//模式匹配算法KMP
//求模式串T的next函数值并存入数组next
void get_next(SString T,int next[])
{
int i = 1,j = 0; next[1] = 0;
while (i < T[0])
{
if (j==0 || T[i]==T[j]) { ++i; ++j; next[i] = j; }
else { j = next[j]; }
}
}
//求模式串T的next函数修正值并存入数组nextval
void get_nextval(SString T,int nextval[])
{
int i = 1,j = 0; nextval[1] = 0;
while (i < T[0])
{
if (j==0 || T[i]==T[j])
{
++i; ++j;
if (T[i] != T[j])
{ nextval[i] = j; }
else { nextval[i] = nextval[j]; }
}
else { j = nextval[j]; }
}
}
//利用模式串T的next函数求T在主串S中第pos字符之后的位置的KMP算法//1=<pos=<StrLength(S)
int Index_KMP(SString S,SString T,int pos,int next[])
{
int i = pos,j = 1;
while (i<=S[0] && j<=T[0])
{
if (j==0 || S[i]==T[j])
{ ++i; ++j; }
else { j = next[j]; }
}
if (j > T[0])
{ return i - T[0]; }
else { return 0; }
}
- 模式匹配---KMP算法
- 模式匹配 KMP算法
- 模式匹配-KMP算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- 模式匹配kmp算法
- 模式匹配算法kmp
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP算法模式匹配
- KMP 模式匹配算法
- HDOJ 1114 Piggy-Bank(完全背包)
- css3的display定义不同类型的盒
- 手写wsdl文件
- UI初学 按钮
- 将图片转成字节流
- 模式匹配KMP算法
- java中static的使用
- 连接池的使用(一)
- struts2框架开发的第一个应用
- [NOI2001]方程的解数
- struts2中访问和添加Application、session以及request属性
- 矩阵顺时针旋转90度
- struts2实现文件上传
- hdoj 2546 饭卡 【背包】