2014-01-05 36 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 *字符串?

但是,我不想將char*字符串轉換爲std::string,因爲在那種情況下,內存被複制,這就是我想要避免的。

現在我有問題通過boyer_moore_search方法的前2個參數,它接受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

相關問題