⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmp.c

📁 BF和KMP算法实例
💻 C
字号:
/*kmp算法*/ 
int pmatch(char t[],char p[],int next[])
  {
  int i,j,n;
  i=0;
  j=0;
  while(i<strlen(p)&&j<strlen(t))
  if(i==-1||p[i]==t[j])
  { i++;j++;}
  else
  { display(t,p,j,i);

  i=next[i]; }
  if(i>=strlen(p))
  { display(t,p,j,i);return(j-strlen(p)+1);}
  else return -1;
  }

  makenext(char p[],int next[])
  {
  int i,k=-1;
  i=0;
  next[0]=-1;
  while(i<strlen(p)-1)
  {
   while(k>=0&&p[i]!=p[k])
   k=next[k];
   i++; k++;
   if(p[i]==p[k])
   next[i]=next[k];
   else next[i]=k;
   }
   }
   display(char s[],char t[],int i,int j)
   {
   int n;
   for(n=0;n<strlen(s);n++)
   printf(" %c",s[n]); printf("\n");
   for(n=0;n<i-j;n++) printf("  ");
   for(n=0;n<strlen(t);n++) printf(" %c",t[n]); printf("\n\n");
   }
   main()
   {
   char a[50],b[50];
   int next[50],i;
   printf("Enter string a:");
   scanf("%s",a);
   printf("Enter string b:");
   scanf("%s",b);
   makenext(b,next);
   i=pmatch(a,b,next);
   printf("The result is  %d\n",i);
   getch();
   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -