Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2018, 21:33   #1
azunight
 
Регистрация: 02.10.2018
Сообщений: 6
По умолчанию Проблема с абзацами при поиске слов

Здраствуйте, дано задание : при помощи метода Бойера-Мура произвести поиск слов в тексте, который берем из текстового файла. Это я осуществил, но в процессе тестирования появилась проблема, что ,если поставить абзацы между предложениями, программа не производит поиск. Как это можно исправить?
Спасибо. Вот код
Код:
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <vector>

# include  <fstream>
using namespace std;
template <typename T, typename C, int ASIZE, C AS> class BMHorspool { //  будут использоваться классы и встроенные типы данных
    
private:
    typedef typename T::iterator iter;
    T *haystack;
    int alpha_size;
    int hay_size, needle_size;
    int Tab[ASIZE];
    
    
    void createBMHTable(T * needle) { // таблица 
        int i;
        C ch;
        
        for (i=0; i<ASIZE; ++i) {
            Tab[i] = needle_size; 
        }
        for (i=0; i<needle_size-1; ++i) {
            ch = (*needle)[i];
            Tab[ch-AS] = needle_size - (i+1); // таблица смещений
        }
        
        ch = AS;
        for (i=0; i<ASIZE; ++i) {
            ++ch;
        }
    }
    
    BMHorspool();
    BMHorspool(BMHorspool &);
    
    public :
    BMHorspool(T *hay): haystack(hay){
        hay_size = hay->length();
    }
    
    vector<int> * find (T *ned) {
        vector<int> *res;
        iter h, n;
        int pos, delta;
        
        T *needle = ned;
        res = new vector<int>();
        needle_size = needle->length();
        
        createBMHTable(needle);
        h = haystack->begin();
        n = needle->begin();
        
        while (h+needle_size <= haystack->end()) {
            for (pos= needle_size-1; *(h+pos) == *(n+pos); --pos);  // тексты файла
            if (pos < 0) {
                res->push_back(h - haystack->begin());
                h +=needle_size;
                continue;
            }
            delta = Tab[(*(h+pos)) - AS] - (needle_size-1-pos);
            if (delta < 1) {
                delta = Tab[(*(h+pos)) - AS];
            }
            h += delta;
            
        }
        return res;
    }
    vector<int> operator ()(T *ned) {
        return find(ned);
    }
    ~BMHorspool() {
        
    }
    
};
int main(int argc, const char * argv[])
{
    vector<int> * res;
    
    
    setlocale(0,"");
	
	string s2;
	cout << "введите строку"<< endl ;
	cin >> s2;
	 string s1;
    ifstream file("D:\\prog\\123.txt");
     
	 
	 while(getline(file, s1))
	 { 
	 
        cout << s1<< endl ;
    }
    
    
    BMHorspool<string, char, 10000, 'a'> bmh(&s1);
    res = bmh.find(&s2);
    
    cout<<"Pattern found in locs : ";
    for(vector<int>::iterator i = res->begin(); i!= res->end(); ++i) { // в строчку через пробел
        cout<<*i<<" ";
    }
    cout<<endl;
    delete res;
    
}
azunight вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в поиске по реестру. hapera2 Общие вопросы Delphi 2 19.12.2013 11:03
Убыстрение макроса при поиске слов Ципихович Эндрю Microsoft Office Word 2 26.02.2013 16:53
Ошибка при поиске по dataGridView Ёжик в тумане C# (си шарп) 1 04.06.2012 14:21
Отбор записей при поиске artemavd Общие вопросы Delphi 14 03.04.2012 10:40
Ошибочка при поиске. skytechkrutoi Общие вопросы .NET 1 20.01.2011 13:01