Форум программистов, компьютерный форум CyberForum.ru

Боуер Мур. поиск подстроки - C++

Восстановить пароль Регистрация
 
Alex_Gnatuyk
2 / 2 / 1
Регистрация: 04.12.2013
Сообщений: 15
09.03.2014, 12:23     Боуер Мур. поиск подстроки #1
Написал код, но он некорректно ищет подстроку. В зависимости где находится искомый элемент в тексте. Может вы найдете ошибку?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
 
using namespace std;
 
void search(char*text, char*find, int n2, int n1)
{ 
    
    int end=n2;
    int k=0;
    int r,j;
    int kn=0;//счетчик по начальной строке
    
    while (kn<n1)
        {
            
            int pk=kn+n2-1;//перемещаемся в начальной строке в предполагаемый конец слова
             
            if (find[end-1]==text[pk])
            {while ((find[end-1]==text[pk])&&(end-1>=0))//сравниваем точный конец слова с предполагаемым концом
                    {   
                        end--;//если они совпали то
                        pk--;//перемещаем счетчики
                        
                    }
             if (end==0) 
                        {   k++;
                            cout<<"\nПозиция "<<kn+1;
                            cout<<"\nНайденная строка\t";
                            for (int i=0; i<kn+n2; i++)
                                cout<<text[i];
                            break;
                            //end=n2;
                            //kn++;
                            
                        }
 
                }
                else
                    {for( r=end-1; r>=0;r--)
                    {
                        j=r;
                        if (find[r]==find[pk])
                            
                        {kn=kn+r;break;}
                    
                            
                    }
                    if (j==0)
                        kn=kn+n2;
            }
                    //kn++;
            
    }
 
 
}
int main()
{
    setlocale(LC_ALL,"RUS");
    cout <<"Введите начальный текст\n";
    char *text = new char;
    cin >> text;
    
    cout << "\nВведите текст, который нужно найти\n";
    char *find = new char;
    cin >> find;
    cout <<"\n";
    int n1=strlen(text);
    int n2=strlen(find);
    search(text, find, n2, n1);
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2014, 12:23     Боуер Мур. поиск подстроки
Посмотрите здесь:

C++ Поиск подстроки
Мне надо сделать поиск последнего вхождения подстроки s1 в строку s(с функцией LastPos, не strstr). В этом коде просто вхождение подстроки в строку. C++
Поиск подстроки C++
Поиск подстроки C++
Поиск подстроки C++
Поиск подстроки C++
C++ Поиск подстроки
Поиск подстроки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Worf
42 / 42 / 6
Регистрация: 06.02.2014
Сообщений: 227
09.03.2014, 12:48     Боуер Мур. поиск подстроки #2
В чём заключается "некорректность"?
Alex_Gnatuyk
2 / 2 / 1
Регистрация: 04.12.2013
Сообщений: 15
09.03.2014, 14:40  [ТС]     Боуер Мур. поиск подстроки #3
@Worf если я выбираю поиск последних двух элементов текста, то он их не ищет.
Цитата Сообщение от Worf Посмотреть сообщение
В чём заключается "некорректность"?
Yandex
Объявления
09.03.2014, 14:40     Боуер Мур. поиск подстроки
Ответ Создать тему
Опции темы

Текущее время: 16:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru