Пока не закончил, нужно исправлять алгоритм построения автомата.
Всем, кто решает ту же проблему, настоятельно рекомендую обратить внимание на следующие поисковые запросы:
"aabaab" "?b"
"abcd" "a?d"
У меня они работают неправильно.
Поиск без знака вопроса у меня работает без проблем. UPD:
Исправил предыдущие ошибки, зато появились новые
Нашёл случай, который не лезет в текущую концепцию автомата. Рассмотрим строку для поиска "a?c" и попробуем для неё построить автомат.
Code
|a|c|_
0|1|0|0
1|2|2|2
2|?|3|0
На месте знака вопроса может стоять либо 1, либо 2 - в зависимости от того, какой символ там оказался в исходной строке. Поэтому по одной строке поиска в данном случае автомат (такой, как я строю сейчас) построить невозможно.
Проверить наличие этой ошибки можно, например, по такому запросу: "aabc" "a?c".
Мой автомат - это (char * int array) list . Также доделал звёздочку на предпоследнем месте.