持っていない (欲しい、必要としている) 人にとっては、C++20
このC++11
解決策が選択肢になるかもしれません。
これは出力反復子でテンプレート化されるため、分割項目を追加する独自の宛先を指定でき、複数の連続する区切り文字を処理する方法を選択できます。
はい、使用しますstd::regex
が、既に C++11 の幸せな土地にいる場合は、使用しないでください。
////////////////////////////////////////////////////////////////////////////
//
// Split string "s" into substrings delimited by the character "sep"
// skip_empty indicates what to do with multiple consecutive separation
// characters:
//
// Given s="aap,,noot,,,mies"
// sep=','
//
// then output gets the following written into it:
// skip_empty=true => "aap" "noot" "mies"
// skip_empty=false => "aap" "" "noot" "" "" "mies"
//
////////////////////////////////////////////////////////////////////////////
template <typename OutputIterator>
void string_split(std::string const& s, char sep, OutputIterator output, bool skip_empty=true) {
std::regex rxSplit( std::string("\\")+sep+(skip_empty ? "+" : "") );
std::copy(std::sregex_token_iterator(std::begin(s), std::end(s), rxSplit, -1),
std::sregex_token_iterator(), output);
}