2013-12-07 38 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