実現したいこと
KMP法を実装したいです。
今ABABCDEFGHのテキストとパターンABCは実装できたが、
テキスト:AAAAG パターンAAGでパターンが同じ文字で繰り返される時
エラーになる。もう少しなので力を貸してください。
前提
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
#include <stdio.h> #include <stddef.h> #include <limits.h> /*--- KMP法による文字列探索 ---*/ char *kmp_match(char *pat,char *txt) { char *pt=txt; /* txtをなぞるカーソル */ char *pp=pat; /* patをなぞるカーソル */ int skip[1024]; int a,b; a=1; b=0; /* スキップテーブル */ skip[1]=0; while (pat[a] != '\0') { if (pat [a ]== pat[b]){ a=a+1; skip[a]=b; b=b+1; } else if (b == 0) skip[a++] = b; else b==skip[b]; } pt=txt; pp=pat; while (*pt != '\0' && *pp!= '\0') { if (*pt==*pp) { pt++; pp++; } else if (pp == pat) pt++; else pp =pat+ skip[pp-pat-1]; } if (*pp == '\0') return (pt-(pp-pat)); return NULL; } int main(void) { char *s; char s1[80]; /* テキスト */ char s2[80]; /* パターン */ printf("テキスト:"); scanf("%s", s1); printf("パターン:"); scanf("%s", s2); s= kmp_match(s2, s1); /* 文字列s1から文字列s2をKMP法で探索 */ if (s == NULL) puts("テキスト中にパターンは存在しません。"); else printf("%ld文字目に見つかりました。\n", s - s1 + 1); return (0); }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント