Я реализовал алгоритм поиска Бойера-Мура-Хорспула, и он отлично работает, когда я хочу выполнить поиск вперед по тексту. Я пытаюсь адаптировать его для работы в обратном направлении и, похоже, не могу сделать это правильно.
Есть ли пример поиска в обратном направлении с использованием BMH?
В качестве справки, вот мой код:
POSITION_T cDocument::FindNext(std::string needle, POSITION_T start)
{
size_t buffersize = mBuffer.GetByteSize() ;
size_t needlesize = needle.length() ;
vector badchars(256, -1) ;
BadCharHueristic(needle, badchars) ;
size_t s = mBuffer.ConvertPositionToByte(start) ;
while(s = 0 && needle[j] == mBuffer.GetByte(s + j))
{
j-- ;
}
if(j < 0)
{
// s holds our position in bytes
return mBuffer.ConvertByteToPosition(s) ;
}
else
{
ssize_t b = j - badchars[mBuffer.GetByte(s + j)] ;
s += Max(1, b) ;
}
}
return GetTextSize() ;
}
Подробнее здесь: https://stackoverflow.com/questions/502 ... e-horspool