论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言教程-KMP字符串搜索算法

文章类别:C语言程序设计 | 发表日期:2010-12-17 9:44:22

C语言教程-KMP字符串搜索算法

// MyKMP.cpp : Defines the entry point for the console application. 
#include "stdafx.h" 

int next[255]; 
char pat[]="aacaab"; 
char str[]="fsoifhewgsdksdkfhsdifhewhfefksdhfdsoihfoehfosdhfdsaacaab"; 

void getNext(char pat[], int next[]) 
{ 

int j=0; 
for(int i=0;pat[i];i++) 
{ 
if(i==0) next[i]=-1;  
else 
{ 
if(pat[i]==pat[j]) 
{ 
++i; 
++j; 
next[i]=j; 
} 
else j=next[j]; 
} 

} 
} 

int KMP(char *str1, char*pat, int *next) 
{ 
int i=0,j=0; 
while(str[i]) 
{ 
if(pat[j]==0) return i-j; 
if(j==0 || str[i]==pat[j]){ 
++i; 
++j; 
} 
else j=next[j]; 
} 
if(pat[j]==0) return i-j; 
return -1; 
} 

int main(int argc, char* argv[]) 
{ 
int i; 
getNext(pat,next); 
int result=KMP(str,pat,next); 
printf("%s\n",str); 
for(i=0;i<result;i++) printf(" "); 
printf("%s\n",pat); 
printf("at %d\n",result); 
return 0; 
} int next[255]; 
char pat[]="aacaab"; 
char str[]="fsoifhewgsdksdkfhsdifhewhfefksdhfdsoihfoehfosdhfdsaacaab"; 

void getNext(char pat[], int next[]) 
{ 
int i; 
int j=0; 
for(i=0;pat[i];i++) 
{ 
if(i==0) next[i]=-1; 
else 
{ 
if(pat[i]==pat[j]) 
{ 
++i; 
++j; 
next[i]=j; 
} 
else j=next[j]; 
} 

} 
} 

int KMP(char *str, char*pat, int *next) 
{ 
int i=0,j=0; 
while(str[i]) 
{ 
if(pat[j]==0) return i-j; 
if(j==0 || str[i]==pat[j]){ 
++i; 
++j; 
} 
else j=next[j]; 
} 
if(pat[j]==0) return i-j; 
return -1; 
} 

int main(int argc, char* argv[]) 
{ 
int i; 
int result; 
getNext(pat,next); 
result=KMP(str,pat,next); 
printf("%s\n",str); 
for(i=0;i<result;i++) printf(" "); 
printf("%s\n",pat); 
printf("at %d\n",result); 
return 0; 
} /*KMP算法*/ 

/*a string begins with index of 0 and ends with the char '\0'*/ 
void getNext(char pat[], int next[])  
 
int j = 0; 
int k = -1; 
next[0] = -1; 

while (pat[j]) 
{ 
if ( k == -1 || pat[j] == pat[k]) 
{ 
j++; 
k++; 
next[j] = k; 
} 
else 
{ 
k = next[k]; 
} 
}
 


int index_KMP(char str[], char pat[]) 
{ 
int i = 0; 
int j = 0; 
int next[255]; 

getNext(pat, next); 

while (str[i]) 
{ 
if (pat[j] == '\0') 
{ 
return (i - j); 
} 
if (j == -1 || str[i] == pat[j]) 
{ 
i++; 
j++; 
} 
else 
{ 
j = next[j]; 
} 
} 
return -1; 
}

进入C语言程序设计视频教程专区

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058