2013-12-07 41 views
0

我想在C++中以最快的方式拆分字符串。在這裏,我得到一個錯誤:C++ boost :: iterator_range <iter> string_view錯誤

#include <bitset> 
#include <iostream> 
#include <boost/algorithm/string/split.hpp> 
#include <boost/algorithm/string/classification.hpp> 
#include <boost/timer.hpp> 

using namespace std; 
size_t const N = 10000000; 
template<typename C> 
void test_strpbrk(string const& s, char const* delims, C& ret) 
{ 
    C output; 

    char const* p = s.c_str(); 
    char const* q = strpbrk(p + 1, delims); 
    for (; q != NULL; q = strpbrk(p, delims)) 
    { 
     output.push_back(typename C::value_type(p, q)); 
     p = q + 1; 
    } 

    output.swap(ret); 
} 

int main() 
{ 
    typedef string::const_iterator iter; 
    typedef boost::iterator_range<iter> string_view; 

    vector<string_view> vsv; 
    test_custom(text, delims, vsv); 
} 

在Visual Studio說:cannot convert from 'const char *' to 'const std::_String_const_iterator<std::_String_val<std::_Simple_types<char>>>'

能否請你幫我,我應該使這個在Visual Studio中的任何選項來工作嗎?

+0

注:有一個'的std :: string_view'在作品 –

回答

1

似乎你嘗試轉換char const*std::string::const_iterator,例如,傳遞參數時,創建了一系列功能:雖然std::string::const_iterator可能是typedefchar const*沒有要求,即是這種情況。不過,我認爲你的代碼沒有給出足夠的上下文來指出確切的問題。您可能希望查找傳遞字符串文字的位置,或者獲取std::string(即沿着&str[index]&*it的行)的某一部分的地址。

根據你編輯,我上面懷疑的事實確實得到了證實!你需要通過添加適當的偏移量char const*是你在玩回std::string::const_iterator S,例如翻譯:

typename C::value_type(s.begin() + (p - s.c_str()), s.begin() + (q - s.c_str())) 
+0

請參閱答案這裏:http://stackoverflow.com/questions/5505965/fast-string-splitting-with-multiple-delimiters – SkyRipper

+0

@SkyRipper:爲什麼?引用的問題和答案似乎與您的問題無關!但是你應該提供[SSCCE](http://sscce.org/)! ...以及剛剛創建的文章的更新**完全**確認了我所猜測的內容:您嘗試從'char const *'構造'std :: string :: cont_iterator'! –

+0

我做了你告訴我的那個 – SkyRipper