Я реализовал алгоритм поиска Бойера-Мура-Хорспула, и он отлично работает, когда я хочу искать вперед в моем тексте. Я пытаюсь адаптировать его для работы в обратном направлении, и, похоже, не могу понять это правильно.
Есть ли пример поиска в обратном направлении с использованием BMH?
Для справки вот мой код:
POSITION_T cDocument::FindNext(std::string needle, POSITION_T start)
{
size_t buffersize = mBuffer.GetByteSize() ;
size_t needlesize = needle.length() ;
vector<int> badchars(256, -1) ;
BadCharHueristic(needle, badchars) ;
size_t s = mBuffer.ConvertPositionToByte(start) ;
while(s <= (buffersize - needlesize))
{
ssize_t j = needlesize - 1 ;
while(j >= 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() ;
}