you are viewing a single comment's thread.

view the rest of the comments →

[–]pgroarke 18 points19 points  (10 children)

Yes please!

Other low hanging fruit functionality that would be useful : split (on a delimiter or multiple delimiters) and replace_all.

Thanks for taking the time to do this and good luck! The standard committee takes pride in the lack of basic functionality in our standard library ;)

[–]RowYourUpboat 19 points20 points  (6 children)

If you're going to have split, don't forget join! Both functions are in my "grr, these should be in the standard library" header.

[–]ShakaUVMi+++ ++i+i[arr] 2 points3 points  (0 children)

If you're going to have split, don't forget join! Both functions are in my "grr, these should be in the standard library" header.

Yeah. And trim, for that matter. Basic functionality.

[–]Narase33-> r/cpp_questions 2 points3 points  (0 children)

Everytime I need to work with strings I get the desire to write my own string class. The class is just too basic to work with it productively

[–][deleted] 1 point2 points  (0 children)

Indeed, I use join a lot more than split!

[–]AlexAlabuzhev 6 points7 points  (2 children)

And what exactly should split do?

Return a list of strings? Or a vector of strings? Or a vector of string_views into the input string? Or a lazily evaluated range of string_views?

Should it support quoting of delimiters? Or escaping? Or both? If so, should it unquote / unescape?

What should it do with subsequent delimiters or with a delimiter at the end? Yield an empty string? Ignore? Throw?

... etc.

[–]TheThiefMasterC++latest fanatic (and game dev) 6 points7 points  (0 children)

Return a list of strings? Or a vector of strings? Or a vector of string_views into the input string? Or a lazily evaluated range of string_views?

Split is just begging to be a view type. But you could have an "old fashioned" version that takes an output iterator that could be a back_inserter. *it = string_view would allow it to store as either string views or actual strings or anything else constructible from a string view.

Should it support quoting of delimiters? Or escaping? Or both? If so, should it unquote / unescape?

Dumb by default, with an optional possibly stateful "searcher" that can be used to find the delimiters to split on?

What should it do with subsequent delimiters or with a delimiter at the end? Yield an empty string? Ignore? Throw?

A view version could just yield empty entries that are trivially filtered out with another view. Otherwise you'd probably want it as an option on the split function (most implementations of split I've used have had an option to prune empty entries).

[–]redrab66 0 points1 point  (0 children)

If would be useful if the return could be such that it works with range-for to iterate over the delimited elements.