C++1y 文字列のsplit

N3593 std::split(): An algorithm for splitting strings



文字列を、指定した区切り文字で分割するsplit()関数が提案されています。

// 文字列をカンマで分割する
vector<string_view> v { split("a,b,c", ",") };

// v == {"a", "b", "c"}

split()関数の戻り値は、今のところstring_viewのなんらかのRangeが返される、ということで考えられています。
string_viewと、コンテナのRangeを受け取るコンストラクタ追加とセットで提案されています。


区切り文字を指定する方法としては、以下の3つのクラスを提供することが考えられています:

  • char_delimiter : 1文字で区切り文字を指定する
  • literal_delimiter : 区切り文字列を指定する
  • any_of_delimiter : 文字列に含まれるいずれかの文字を、区切り文字として扱う

区切り文字クラスを指定しなかった場合は、デフォルトでliteral_delimiterになります。

// 区切り文字を指定する
vector<string_view> v { split("a,b,c", char_delimiter(',')) };

// 区切り文字列を指定する(デフォルト)
vector<string_view> v { split("a, b, c", literal_delimiter(", ")) };

// いずれかの文字を、区切り文字と見なす
vector<string_view> v { split("a,b-c", any_of_delimiter(",-")) };

今のところはこの3つの区切り文字クラスが考えられていますが、正規表現での区切り文字指定等、考える余地がある、ということになっています。