Skip to content

Boost:Tokenizer

Example

#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}

구분자를 다른 문자열로 지정하고 싶을 경우 아래와 같이 사용하면 된다.

#include <boost/tokenizer.hpp>
#include <string>
#include <iostream>

int main()
{
    typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
    std::string s = "Boost C++ libraries";
    boost::char_separator<char> sep(" ");
    tokenizer tok(s, sep);
    for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) {
        std::cout << *it << std::endl;
    }
}

Number split

#include <boost/algorithm/string.hpp>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>

// Input example: "1,2 , 3,"
std::vector<int> parseIds(std::string const & ids)
{
    using tokenizer = boost::tokenizer<boost::char_separator<char> >;
    using char_separator = boost::char_separator<char>;

    std::vector<int> result;
    char_separator sep(",");
    tokenizer tok(ids, sep);

    std::string trimming;

    for (tokenizer::iterator it = tok.begin(); it != tok.end(); ++it) {
        trimming = *it;
        boost::trim(trimming);

        try {
            result.push_back(boost::lexical_cast<int>(trimming));
        } catch(boost::bad_lexical_cast & e) {
            // SKIP!
        }
    }

    return result;
}

Favorite site