2014-01-05 1 views
2
char * pStart = ...; 
char * pLast = ...; 
std::string pattern("wn3901s"); 

std::string::const_iterator it = boost::algorithm::boyer_moore_search<>( 
    ???, 
    ???, 
    pattern.begin(), 
    pattern.end() 
); 

Я пытаюсь найти большую строку char* в памяти, pStart указывает на ее первый адрес символа; pLast указывает на последнее.Как использовать boyer_moore_search для поиска символа * строки в памяти?

Однако, я не хочу преобразовывать строку char* в std::string, потому что в этом случае память копируется, и этого я хочу избежать.

Теперь у меня есть проблема с передачей первых 2 параметров для метода boyer_moore_search, который принимает const_iterator.

Следует ли добавить новый унаследованный класс от const_iterator, чтобы эмулировать строку char*? Может ли быть какой-нибудь пример?

Спасибо

ответ

3

Вы можете использовать char * в качестве итератора

char *iterator_ = boost::algorithm::boyer_moore_search(pStart, pLast, pattern.begin(), pattern.end()); 

Итератор любой объект, который, указывая на какой-то элемент в диапазоне элементов (например, массив или контейнер), имеет возможность итерации через элементы этого диапазона с использованием набора операторов (с наименьшими операторами приращения (++) и разыменования (*)).

Наиболее очевидной формой итератора является указатель.

http://www.cplusplus.com/reference/iterator/

2

Точно как sliser только указал ...

#include<boost/algorithm/searching/boyer_moore.hpp> 
#include<cstdio> 
#include<cstring> 

using boost::algorithm::boyer_moore_search; 

int main(int argc, char ** argv) { 

    const char * text_start = "This is the string in which we will search for the pattern."; 
    const char * text_end = text_start + strlen(text_start); 
    const char * pattern_start = "search"; 
    const char * pattern_end = pattern_start + strlen(pattern_start); 

    const char * found = boyer_moore_search(text_start, text_end, pattern_start, pattern_end); 

    printf("%s", found); 

    return 0; 
} 
+0

Будет ли она работать на 'неподписанные символ *'? – user2846246

Смежные вопросы