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;
}