KMP算法的C语言实现
2015-10-05 21:13
726 查看
针对之前的两篇博文,写的KMP的C代码实现:
#include <stdio.h> #include <string.h> int GetNext(char src[],int j) { int i=0; if(j==0) { return -1; } i=GetNext(src,(j-1)); if(src[(i+1)]==src[j]) { return (i+1); } else { while((src[i+1]!=src[j])&&(i>0||i==0)) { i=GetNext(src,i); if(src[i+1]==src[j]) { return (i+1); } } return -1; } } int kmp(char s[],char t[],int next[]) { int i,j; i=j=0; len_s=strlen(s); len_t=strlen(t); while(i<len_s&&j<len_t) { if(s[i]==t[j]) { i++; j++; } else { if(j!=0) { j=next[j]+1; } else { i++; j=0; } } } if(j==len_t) return i-len_t; else return -1; } int main() { char source[100]={0}; char target[10]={0}; int next[50]={-2}; int i=0; printf("please input string source: \n"); scanf("%s",source); printf("input string : %s\n",source); printf("please input string target: \n"); scanf("%s",target); printf("input string : %s\n",target); for(i=0;i<strlen(target);i++) { next[i]=GetNext(target,i); printf("next[%d]= %d\n",i,next[i]); } printf("index : %d\n",kmp( source,target,next)); }
编译与执行:
相关文章推荐
- C++中的虚函数(类的向上转换,和向下转换)
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
- 简单0-1背包
- [C++] Variable/Hex conversion
- 浅谈C++多态性
- 黑马程序员—OC语言小知识点及示例
- 浅谈C++多态性
- 【static&extern】c语言static用法
- C++学习–基础篇(书籍推荐及分享)
- C语言的小知识(二)
- C++中如何修改const变量 (指针)
- MFC ODBC(一)
- 《C++primer(第五版)》学习之路-第十八章:用于大型程序的工具
- 快速幂的基本概念
- C语言的谜题
- 大话设计模式C++达到-文章16章-国家模式
- C++中int型128转入char型变量c中
- 深入理解C/C++ [Deep C (and C++)]
- C语言中指针数组和数组指针