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;
    }
    
  • 相关阅读:
    PHP
    优秀网址
    客户关系管理系统CRM
    面试题
    练习并熟练掌握交互式 SQL 语言
    嵌入式的SQL程序设计
    数据库总结
    JDBC
    玩转Android之Drawable的使用
    Android开发之Activity转场动画
  • 原文地址:https://www.cnblogs.com/HachikoT/p/13823461.html
Copyright © 2011-2022 走看看