朴素的和KMP模式匹配算法
2014-06-21 17:41
344 查看
朴素的模式匹配算法:
KMP模式匹配算法:
改进的KMP模式匹配算法:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 20 //./execute_file abcdefghijk efg 1 main(int argc,char *argv[]) { int j=0,k=0; int i = atoi(argv[3]); //where in S[] begin Index printf("argv[1]=%s,len = %d\n",argv[1],strlen(argv[1])); printf("argv[2]=%s,len = %d\n",argv[2],strlen(argv[2])); int Slen = strlen(argv[1]); int Tlen = strlen(argv[2]); char S[MAXSIZE]; char T[MAXSIZE]; memcpy(S , argv[1] , Slen); memcpy(T , argv[2] , Tlen); while( i < Slen && j < Tlen) { if(S[i] == T[j]) { i++; j++; } else { i = i-j+1; j = 0; } } if(j >= Tlen) printf("Index success,pos = %d\n", i-j); else return; }
KMP模式匹配算法:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 20 get_next(char *T ,int next[]) { int i=1,j=0,k=0; int Tlen = strlen(T); next[0] = 0; next[1] = 0; while(i < Tlen) { printf("next while %d,T[i%d]=%c,T[j%d]=%c\n",k++,i,T[i],j,T[j]); if(T[i] == T[j] || j==0) { ++i; ++j; next[i] = j; } else { j = next[j]; } } for(i=0 ; i<Tlen ; i++) printf(" next[%d]= %d ",i,next[i]); printf("\n"); return; } //./execute_file abcdefghijk efg 1 main(int argc,char *argv[]) { int j=0,k=0; int i = atoi(argv[3]); //where in S[] begin Index printf("argv[1]=%s,len = %d\n",argv[1],strlen(argv[1])); printf("argv[2]=%s,len = %d\n",argv[2],strlen(argv[2])); int Slen = strlen(argv[1]); int Tlen = strlen(argv[2]); char S[MAXSIZE]; char T[MAXSIZE]; memcpy(S , argv[1] , Slen); memcpy(T , argv[2] , Tlen); int next[MAXSIZE]; get_next(T , next); while( i < Slen && j < Tlen) { if(j == 0 || S[i] == T[j]) { ++i; ++j; }else{ j = next[j]; } } if(j >= Tlen) printf("Index success,pos = %d\n", i-j); else return; }
改进的KMP模式匹配算法:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 20 get_nextval(char *T ,int *nextval) { int i=1,j=0; int Tlen = strlen(T); nextval[0] = 0; nextval[1] = 0; while(i < Tlen) { if(T[i] == T[j] || j==0) { i++; j++; if(T[i]!=T[j]) nextval[i] = j; else nextval[i] =nextval[j]; } else { j = nextval[j]; } } for(i=0 ; i<Tlen ; i++) printf(" nextval[%d]= %d ",i,nextval[i]); printf("\n"); return; } //./execute_file abcdefghijk efg 1 main(int argc,char *argv[]) { int j=0,k=1; int i = atoi(argv[3]); //where in S[] begin Index printf("argv[1]=%s,len = %d\n",argv[1],strlen(argv[1])); printf("argv[2]=%s,len = %d\n",argv[2],strlen(argv[2])); int Slen = strlen(argv[1]); int Tlen = strlen(argv[2]); char S[MAXSIZE]; char T[MAXSIZE]; memcpy(S , argv[1] , Slen); memcpy(T , argv[2] , Tlen); int nextval[MAXSIZE]; get_nextval(T , nextval); while( i < Slen && j < Tlen) { if(j == 0 || S[i] == T[j]) { i++; j++; }else{ j = nextval[j]; } } if(j >= Tlen) printf("Index success,pos = %d\n", i-j); else return; }
相关文章推荐
- 数据结构——串的朴素模式和KMP匹配算法
- C/C++——朴素的模式匹配算法和KMP模式匹配算法
- 数据结构——串的朴素模式和KMP匹配算法
- 朴素和KMP模式匹配算法(Java)
- 数据结构——串(朴素的模式匹配算法、KMP模式匹配算法)
- 【原创】朴素的模式匹配和改进的模式匹配(KMP)算法说明(草稿)
- 数据结构——串的朴素模式和KMP匹配算法
- 朴素的模式匹配和改进的模式匹配(KMP)算法说明
- 模式匹配 -- KMP 算法原理与实现
- 串的模式匹配算法(非kmp)
- KMP模式匹配算法实现与改进
- 朴素模式的匹配算法-顺序
- 串的模式匹配算法 穷举与KMP
- 经典算法研究:模式匹配(子串匹配)之 KMP 算法(C语言实现版)
- KMP模式匹配算法的一些理解
- KMP模式匹配算法 C++实现
- KMP 模式匹配算法原理分析
- KMP模式匹配算法以及普通模式匹配算法
- KMP模式匹配算法
- poj 3461 KMP模式匹配算法