naiveMatch 素朴法による文字列照合
char *naiveMatch(char *text, int len, char *pattern, int patlen);
text (入力)テキスト len (入力)テキストの長さ pattern (入力)照合パターン patlen (入力)照合パターンの長さ
照合パターンがテキストから見つかった場合はそのポインタ、 見つからなかった場合は 0 (NULL)。
char *naiveMatch(char *text, int len, char *pattern, int patlen) { char c; char *tp, *pp; char *textEnd, *patEnd; if (patlen == 0) return text; if (len < patlen) return NULL; textEnd = text + len - patlen + 1; patEnd = pattern + patlen; c = *pattern++; while (text != textEnd) { if (*text++ == c) { tp = text; pp = pattern; do if (pp == patEnd) return text - 1; while (*tp++ == *pp++); } } return NULL; }
テキストに照合パターンを重ねて、一致するかどうかを調べる。一致しな ければ重ねる位置を右に1つずらして繰り返す。
この方法の計算量は、最悪の場合 O(mn) である。ただし、m、nはそれぞれ テキスト、照合パターンの長さを表す。