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