zoukankan      html  css  js  c++  java
  • C++分隔字符串split

    split

    C++标准库中没有提供split分隔字符串的函数,哎。

    实现一

    下面的实现需要指定分隔符的集合delimiters,以及是否将连续的分隔符看作同一个分隔compress

    enum class TokenCompress {
        On,
        Off
    };
    
    /**
     * 分隔字符串
     * @param s 输入字符串
     * @param delimiters 分隔符集合
     * @param compress 是否将连续的分隔符看作同一个分隔
     * @return 分隔的子字符串列表
     */
    std::vector<std::string> split(const std::string& s, const std::string& delimiters, TokenCompress compress) {
        std::vector<std::string> tokens;
        std::string::size_type beg = 0;
        std::string::size_type end;
        while (std::string::npos != (end = s.find_first_of(delimiters, beg))) {
            tokens.push_back(s.substr(beg, end - beg));
            beg = TokenCompress::On == compress ? s.find_first_not_of(delimiters, end) : end + 1;
        }
        tokens.push_back(std::string::npos == beg ? std::string() : s.substr(beg));
        return tokens;
    }
    

    使用boost::split

    #include <boost/algorithm/string.hpp>中,提供了boost::split函数:

    #include <boost/algorithm/string.hpp>
    
    int main(int argc, char const *argv[])
    {
        std::vector<std::string> tokens;
        boost::split(tokens, "12 34", boost::is_any_of(" "), boost::token_compress_on);
        for (auto& t : tokens) {
            std::cout << "[" << t << "]" << std::endl;
        }
    
        return 0;
    }
    
  • 相关阅读:
    索引信息统计
    删除脚本
    归档脚本
    SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
    用js输出同样字符出现的次数
    grid布局
    统计字符出现的次数
    百度地图
    For each...in,For...in ,For...of的Examples和Explanation
    Object的起源
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13823461.html
Copyright © 2011-2022 走看看