zoukankan      html  css  js  c++  java
  • 几种c++字符串split 函数实现的比较

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

    1. strtok实现 


    std::vector<std::string> split(const char *s, const char *delim)
    {
        std::vector<std::string> result;
        if (s && strlen(s))
        {
            int len = strlen(s);
            char *src = new char[len + 1];
            strcpy(src, s);
            src[len] = '';
            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<std::string>& 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<std::string> 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<std::string> vec;
        while (p != end)
            vec.emplace_back(*p++);
     
        return vec;
    }
     
    4. 使用boost split 实现
    std::vector<std::string> boostsplit(const std::string& input)
    {
        std::vector <std::string> fields;
        boost::split( fields, input, boost::is_any_of( "," ) );
        return fields;
    }

    5. sds  sdssplitlen 函数实现

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

    {

    int len = 0;
    sds* array = sdssplitlen(input.c_str(),input.length(),",",1,&len);
    for(int i=0;i<len;i++)
      v.emplace_back(array[i]);

    }

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

  • 相关阅读:
    每日日报110
    每日日报109
    每日日报108
    每日日报107
    每日日报106
    每日日报105
    每日日报104
    eclipse新建Maven Project项目后出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path问题的解决办法
    0proxy/reflect
    toRefs/toRef/unref/customRef
  • 原文地址:https://www.cnblogs.com/qianlicao/p/9274444.html
Copyright © 2011-2022 走看看