0

我试图在 C++ 中以最快的方式拆分字符串。我在这里收到一个错误:

#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中启用任何选项来让它工作吗?

4

1 回答 1

1

似乎您正在尝试将 a 转换char const*为 a std::string::const_iterator,例如,在将参数传递给创建范围的函数时:虽然std::string::const_iterator可能是 a typedefchar const*但并不要求这种情况。不过,我认为您的代码没有提供足够的上下文来查明确切的问题。您可能想要查找传递字符串文字的位置或获取 a 的一部分的地址std::string(即沿&str[index]or行的东西&*it)。

根据您的编辑,我上面怀疑的内容实际上得到了证实!您需要将char const*正在播放的 s 翻译回std::string::const_iterators,例如,通过添加合适的偏移量:

typename C::value_type(s.begin() + (p - s.c_str()), s.begin() + (q - s.c_str()))
于 2013-12-07T20:34:43.140 回答