//
//字符串模式匹配:KMP算法
//
//06.05.07 vc6.0调试通过
//ZYQ
//
#include <iostream.h>
#include <string>
int* get_next(char *T);
void main()
{
char* s="hhhsauhduwdh";
char* t="hdu";
int i=0;
int j=0;
int S=strlen(s);
int T=strlen(t);
int *next=get_next(t);
while(i<S&&j<T)
{//判定条件i<S&&j<T说明:字符串数组下标从0开始,到字符串长度减1结束
if(j==0||s[i]==t[j])
{i++;j++;}//继续向后比较字符
else
j=next[j];//模式串向后移动
}
if(j>=T)
cout<<i-T+1<<endl;//匹配成功
else
cout<<"0"<<endl;//匹配失败
}
//KMP算法克服了主串中i指针的回朔问题
//求next值的算法
//06.05.07 get_next函数调试时仍有问题。编译时通过,运行时出错。
//
int* get_next(char *T)
{//返回指向next数组首地址的指针
int i=1;
int next[100];
next[1]=0;
int j=0;
while(i<strlen(T))
{
if(j==0||T[i]==T[j])
{i++;j++;next[i]=j;}
else j=next[j];
}//while
return next;
}//get_next
正文
练习:KMP算法 字符串匹配2006-05-08 00:16:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/bclz/13689.html
阅读(5015) | 评论(3)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
评论