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つの区切り文字クラスが考えられていますが、正規表現での区切り文字指定等、考える余地がある、ということになっています。