|
1鱼币
#include<stdio.h>
#include<string.h>
#define maxstrlen 20
void qwe(char T[],char* chars)//字符串的复制,从第二个位置复制,第一个位置用来存储长度
{
int i,len;
len = strlen(chars);
for(i = 1; i <= len ; i++)
{
T[i] = chars[i-1];
}
T[0] = len;
//T[i] = '\0';
}
int indexkmp(char s[],char t[],int next[])//kmp算法
{
int i=1,j=1;
//printf("%d%d",s[0],t[0]);
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;
}
void getnext(char t[],int next[])//next数组的获得
{
int i=1;next[1]=0;int j=0;
while(i<t[0])
{
if(j==0||t[i]==t[j])
{++i;++j;next[i]=j;}
else j=next[j];
}
}
void main()
{
char S[21];
char T[21];
int next[maxstrlen];
for(int i=0;i<maxstrlen;i++)
next[i]=0;
char s[maxstrlen];
printf("输入主串s:\n");
gets(s);
//int slen=strlen(s);
char t[maxstrlen];
printf("输入模式串t:\n");
gets(t);
//int tlen=strlen(t);
qwe(T,t);
qwe(S,s);
getnext(T,next);
printf("输出模式串t的next[]:\n");
for(int j=1;j<=t[0];j++)//next的输出
printf("%d",next[j]);
printf("\n");
printf("结果:\n");
int x=indexkmp(S,T,next);
if(x!=0)
printf("在主串位置%d匹配\n",x);
else
printf("模式串匹配失败");
}
next函数输出的是一大堆的东西,看懵了,求大虾指点
|
最佳答案
查看完整内容
说也不好说。
推荐你看严蔚敏的数据结构关于这节。 讲的很细。
|