KMP算法C代码描述
2005-05-06 20:35
483 查看
/*
*作者JunyiSun @ CCNU
*E-MAIL:CCNUSJY@GMAIL.COM
*KMP算法C代码描述
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_S 101 /*主串的长度最大值为100*/
#define MAX_P 21 /*模式串的长度最大值为20*/
char s[MAX_S],p[MAX_P]; /*s为主串,p为模式串*/
int nextv[MAX_P]; /*p的nextv数组*/
void init_nextv()
{
int i=0,j=-1;
int p_len; /*模式串的长度*/
p_len=strlen(p);
nextv[0]=-1;
while(i<p_len-1){
if(j==-1 || p[i]==p[j]){
++i;++j;
if(p[i]!=p[j])nextv[i]=j;
else nextv[i]=nextv[j];
}
else j=nextv[j];
}
}
int kmp()
{
int i=0,j=0,s_len,p_len;
s_len=strlen(s);
p_len=strlen(p);
while(i<s_len && j<p_len){
if(j==-1 || s[i]==p[j]){
i++;j++;
}
else j=nextv[j];
}
if(j==p_len)return i-p_len;
else return -1;
}
int main()
{
int index=0;
printf("请输入主串:");
scanf("%s",s);
printf("请输入子串:");
scanf("%s",p);
init_nextv();
index=kmp();
if(index!=-1)
printf("匹配成功,匹配位置%d/n",index);
else
printf("匹配失败/n");
system("pause");
return 0;
}
*作者JunyiSun @ CCNU
*E-MAIL:CCNUSJY@GMAIL.COM
*KMP算法C代码描述
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_S 101 /*主串的长度最大值为100*/
#define MAX_P 21 /*模式串的长度最大值为20*/
char s[MAX_S],p[MAX_P]; /*s为主串,p为模式串*/
int nextv[MAX_P]; /*p的nextv数组*/
void init_nextv()
{
int i=0,j=-1;
int p_len; /*模式串的长度*/
p_len=strlen(p);
nextv[0]=-1;
while(i<p_len-1){
if(j==-1 || p[i]==p[j]){
++i;++j;
if(p[i]!=p[j])nextv[i]=j;
else nextv[i]=nextv[j];
}
else j=nextv[j];
}
}
int kmp()
{
int i=0,j=0,s_len,p_len;
s_len=strlen(s);
p_len=strlen(p);
while(i<s_len && j<p_len){
if(j==-1 || s[i]==p[j]){
i++;j++;
}
else j=nextv[j];
}
if(j==p_len)return i-p_len;
else return -1;
}
int main()
{
int index=0;
printf("请输入主串:");
scanf("%s",s);
printf("请输入子串:");
scanf("%s",p);
init_nextv();
index=kmp();
if(index!=-1)
printf("匹配成功,匹配位置%d/n",index);
else
printf("匹配失败/n");
system("pause");
return 0;
}
相关文章推荐
- KMP算法之NEXT数组代码原理分析 – 数据结构和算法38
- 苹果内购返回错误代码描述
- KMP算法-代码实现
- SQL 错误代码描述
- 代码描述10313 - Pay the Price
- [转载]分布式病毒协议的C/C++描述代码
- 查找oracle的标准错误代码以及描述
- Scrum框架及其背后的原则(上)——Scrum 框架的伪代码描述
- 12306支付出错:交易失败!代码:50050描述:交易信息不完整
- eMule 的使用场景及初始化任务描述级eMule相关代码分析(仅涉及ed2k)
- IOS证书/私钥/代码签名/描述文件
- 闰平年简介及计算过程描述 - Java代码实现
- 3-8译码器的几种Verilog HDL代码描述方法
- KMP算法中NEXT数组的作用以及代码实现
- uvc摄像头代码解析之描述符
- KMP算法C代码实现
- KMP算法 next函数 代码解析
- KMP算法的实现(Java语言描述)
- 注释应该用来描述代码
- 鸽巢排序算法描述和代码举例