几种c++字符串split 函数实现的比较

文中的字符串split函数功能是 从字符串中按照特定的分隔符进行分割,分割的结果保存到std::vector中。


1. strtok实现 

std::vector split(const char *s, const char *delim)

{

    std::vector result;

    if (s && strlen(s))

    {

        int len = strlen(s);

        char *src = new char[len + 1];

        strcpy(src, s);

        src[len] = '\0';

        char *tokenptr = strtok(src, delim);

        while (tokenptr != NULL)

        {

            std::string tk = tokenptr;

            result.emplace_back(tk);

            tokenptr = strtok(NULL, delim);

        }

        delete[] src;

    }

    return result;

}



2.  优化版的字符串查找方式实现

void supersplit(const std::string& s, std::vector& v, const std::string& c)

{

    std::string::size_type pos1, pos2;

    size_t len = s.length();

    pos2 = s.find(c);

    pos1 = 0;

    while(std::string::npos != pos2)

    {

        v.emplace_back(s.substr(pos1, pos2-pos1));


        pos1 = pos2 + c.size();

        pos2 = s.find(c, pos1);

    }

    if(pos1 != len)

        v.emplace_back(s.substr(pos1));

}


3. 正则表达式方式

std::vector regexsplit(const std::string& input)

    std::regex re(",");

    std::sregex_token_iterator p(input.begin(), input.end(), re, -1);

    std::sregex_token_iterator end;

    std::vector vec;

    while (p != end)

        vec.emplace_back(*p++);


    return vec;

}


4. 使用boost split 实现

std::vector boostsplit(const std::string& input)

{

    std::vector fields;

    boost::split( fields, input, boost::is_any_of( "," ) );

    return fields;

}

5. sds  sdssplitlen 函数实现

void sdssplit(const std::string& input, std::vector& v)

{

int len = 0;

sds* array = sdssplitlen(input.c_str(),input.length(),",",1,&len);

for(int i=0;i

v.emplace_back(array[i]);

}



以上函数用Celero库测试的结果如下:

你可能感兴趣的:(几种c++字符串split 函数实现的比较)