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はそれぞれ テキスト、照合パターンの長さを表す。