Ошибка в функции поиска подстроки в строке. Алгоритм Бойера-Мура-Хорспула.

с++ Программирование Алгоритмы MFC

Функция получает ссылки на две переменные: haystack и needle строкового типа. В haystack должна содержаться строка, в которой будет осуществлён поиск, а needle должна содержать подстроку, которую надо найти. В результате выполнения процедуры переменная функция вернёт номер позиции (при нумерации с единицы), начиная с которого подстрока needle входит в строку haystack, или 0, если вхождения нет.


int CP7Dlg::BM(char *haystack, char *needle)
{ UpdateData(1);
int i=0,j=0,k=0, needle_len=0, haystack_len=0;
char needle_table[256];

needle_len=edit2.GetLength();
haystack_len=edit1.GetLength();

if (needle_len <= haystack_len)
{
for (i = 0; i < 256; i++)
needle_table[i] = needle_len;

for (i = 1; i < needle_len; i++)
needle_table[needle[i-1]] = needle_len-i;

i = needle_len;
j = i;

while ( j > 0 && i <= haystack_len)
{
j = needle_len;
k = i;
while ( j > 0 && haystack[k-1] == needle[j-1])
{
--k;
--j;
}
i+=needle_table[haystack[k-1]];

}
if (i > haystack_len)
return 0;
else return k+1;
}
else return 0;
}


Где ошибка?!

Примечание:
видимо табуляция тут не отображается..(
Ответы:
int BM(string haystack, string needle)
{
int i=0,j=0,k=0, needle_len=0, haystack_len=0;
char needle_table[256];


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.