素朴法による文字列照合


関数名
naiveMatch  素朴法による文字列照合
形式
char *naiveMatch(char *text, int len, char *pattern, int patlen);
引数
text     (入力)テキスト
len      (入力)テキストの長さ
pattern  (入力)照合パターン
patlen   (入力)照合パターンの長さ
関数値
照合パターンがテキストから見つかった場合はそのポインタ、
見つからなかった場合は 0 (NULL)。
注意事項

用例(naiveMatch-test.c

プログラム(naiveMatch.c
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はそれぞれ テキスト、照合パターンの長さを表す。

関連関数
KMP法による文字列照合RK法による文字列照合BM法による文字列照合正規表現による文字列照合