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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конструкторы базового и производного класса http://www.cyberforum.ru/cpp-beginners/thread1114491.html
class first { public: first(int a):first(a){} void Setfirst(int a){first=a;} int Getfirst(){return first;} private: int first; };
C++ Строки. Найти слово, в котором число различных символов минимально Добрый вечер! Помогите, пожалуйста. Ввести n слов с консоли. Найти слово, в котором число различных символов минимально. Если таких слов несколько, найти первое из них. http://www.cyberforum.ru/cpp-beginners/thread1114489.html
Связывание классов C++
Всем привет. Подскажите, пожалуйста, как решить вот такую проблему: У меня есть класс connections который хранит в себе все активные соединения типа connection. Возникает ситуация когда один из множества connection хочет отправить сообщение всем клиентам в классе connections. Для этого я сделал свойство clients в классе connections статическим, но не могу получить доступ к этому свойству в...
C++ Как массово вывести значения всех элементов структуры?
В общем есть код #include<iostream> using namespace std; struct part; { int dom; int kvartira; }; int main()
C++ Написать программу, какая переводит числа с арабской системы в римскую http://www.cyberforum.ru/cpp-beginners/thread1114433.html
Задание: Написать программу, какая переводит числа с арабской системы в римскую. Сам текст программы уже дали в задании, это как вводное задание с ответом, что бы потом спросить что там написано) Как работает сам алгоритм я не понимаю, в этом и проблема. 5 ряд и 22-29 ряды. Не могу разобраться как работает( #include <iostream> #include <stdio.h> #include <conio.h>
C++ Составить программу обработки матрицы с использованием функций. Составить программу обработки матрицы с использованием функций. Каждый пункт задачи оформить в виде функции Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. 1) переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик; 2) найти сумму элементов в тех столбцах, которые содержат хотя бы один отрица¬тельный... подробнее

Показать сообщение отдельно
Alex_Gnatuyk
2 / 2 / 1
Регистрация: 04.12.2013
Сообщений: 16

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

09.03.2014, 12:23. Просмотров 193. Ответов 2
Метки (Все метки)

Написал код, но он некорректно ищет подстроку. В зависимости где находится искомый элемент в тексте. Может вы найдете ошибку?

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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru