|
> (a|b)*abbという正規表現を認識するDFAの状態遷移表を、
>
> A|B|C|D
> a|B|B|B|B
> b|A|C|E|A (開始状態はA,終了状態はD)
E は、D の間違いですね。
> ちなみに、自分で書いたものは全然ダメなようなので無視してくれて結構です。
C を基本から勉強し直してください。
・比較の演算子は、= ではなく、==。
・配列の添え字は、1 ではなく、0 から始まる。
・文字定数は、a ではなく、'a'。
......
---------------------------------------------------------------------
int table[2][4] = {
{ 1, 1, 1, 1 },
{ 0, 2, 3, 0 }
};
int ababb(char *str)
{
int state = 0, i;
for (i = 0; str[i] != '\0'; i++)
if (str[i] == 'a')
state = table[0][state];
else if (str[i] == 'b')
state = table[1][state];
else /* unknown character */
return 0;
return state == 3;
}
----------------------------------------------------------------------
状態を分かりやすく書くなら、
enum { A, B, C, D };
int table[2][4] = {
{ B, B, B, B },
{ A, C, D, A }
};
int state = A, i;
return state == D;
|