C++ KMP算法實現字符串搜索

jopen 9年前發布 | 1K 次閱讀 C/C++ 算法

#include<stdio.h>

define maxsize 100

typedef struct string { int n; char s[maxsize]; }string; int get_nextval(string &T,int nextval[]) { int i=1; int j=0; nextval[1]=0; while(i<T.n) { if(j==0||T.s[i]==T.s[j]) { ++i; ++j; nextval[i]=j; } else j=nextval[j]; } return 0; } int Index(string &S,string &T,int pos) { int i=pos; int j=1; int nextval[255]; get_nextval(T,nextval); while(i<=S.n&&j<=T.n) { if(j==0||S.s[i]==T.s[j]) { ++i; ++j; } else j=nextval[j]; } if(j>T.n) return i-T.n; else return 0; } int main() { string S,T; char c; int i=1,m; printf("請輸入原字符串S,以#號結尾"); while((c=getchar())!='#') { S.s[i]=c; i++; } S.n=i-1; printf("請輸入檢測字符串T,以#號結尾"); fflush(stdin); i=1; while((c=getchar())!='#') { T.s[i]=c; i++; } T.n=i-1; m=Index(S,T,1); printf("檢測結果為:"); if(m==0) printf("找不到字符串!"); else printf("找到字符串,從S的第%d個位置開始\n",m); return 0; }</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!