Skip to content

Commit b6e5677

Browse files
committed
Add erase(), move down tests for strip()
1 parent 42d54c6 commit b6e5677

File tree

3 files changed

+86
-53
lines changed

3 files changed

+86
-53
lines changed

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,9 @@ The following table presents types, values and simplified, short prototypes of t
131131
|   | string **to_uppercase**(string_view sv) | string transformed to uppercase |
132132
|   | string **capitalize**(string_view sv) | string transformed to start with capital |
133133
|   | string **substring**(string_view sv, size_t pos \[, size_t count\]); | substring starting at given position of given length, default up to end |
134-
|   | string **insert**(string_view sv, size_t pos string_view what) | string with substring 'what' inserted at given position |
135-
|   | string **replace**(string_view sv, size_t pos, size_t length, string_view with) | string with substring pos to pos+length replaced with 'whith' |
134+
|   | string **erase**(string_view sv, size_t pos \[, size_t count\]) | string with substring at given position of given length removed, default up to end |
135+
|   | string **insert**(string_view sv, size_t pos, string_view what) | string with substring 'what' inserted at given position |
136+
|   | string **replace**(string_view sv, size_t pos, size_t length, string_view with) | string with substring pos to pos+length replaced with 'with' |
136137
|   | string **replace_all**(string_view sv, string_view what, string_view with) | string with all occurrences of 'what' replaced with 'with' |
137138
|   | string **replace_first**(string_view sv, string_view what, string_view with) | string with first occurrence of 'what' replaced with 'with' |
138139
|   | string **replace_last**(string_view sv, string_view what, string_view with) | string with last occurrence of 'what' replaced with 'with' |
@@ -212,7 +213,6 @@ In the test runner, the version of *string-bare* is available via tag `[.version
212213
<p>
213214

214215
```
215-
string: Setting Windows console to print utf8 characters[unicode][windows]
216216
length: length of given string
217217
size: length of given string
218218
is_empty: true if string is empty
@@ -231,15 +231,16 @@ to_lowercase: string transformed to lowercase
231231
to_uppercase: char transformed to uppercase
232232
to_uppercase: string transformed to uppercase
233233
append: string with second string concatenated to first string
234-
substring: substring given position and length
235-
strip_left: string with characters in set removed from left of string [" \t\n"]
236-
strip_right: string with characters in set removed from right of string [" \t\n"]
237-
strip: string with characters in set removed from left and right of string [" \t\n"]
234+
substring: substring starting at given position of given length, default up to end
235+
erase: string with substring at given position of given length removed - default up to end
238236
insert: string with substring inserted at given position
239237
replace: string with substring given by position and length replaced
240238
replace_all: string with all occurrences of substring replaced
241239
replace_first: string with first occurrence of substring replaced
242240
replace_last: string with last occurrence of substring replaced
241+
strip_left: string with characters in set removed from left of string [" \t\n"]
242+
strip_right: string with characters in set removed from right of string [" \t\n"]
243+
strip: string with characters in set removed from left and right of string [" \t\n"]
243244
join: string with strings from collection joined separated by given separator
244245
split: split string into vector of string_view given delimiter - literal_delimiter
245246
split_left: split string into two-element tuple given delimiter - forward - literal_delimiter

include/nonstd/string.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,18 @@ string_nodiscard std::basic_string<CharT> to_case( std::basic_string<CharT> text
10361036

10371037
// insert()
10381038

1039+
#define string_MK_ERASE(CharT) \
1040+
string_nodiscard inline std::basic_string<CharT> \
1041+
erase( \
1042+
std17::basic_string_view<CharT> text \
1043+
, std::size_t pos \
1044+
, std::size_t len = npos ) \
1045+
{ \
1046+
return to_string( text ).erase( pos, len ); \
1047+
}
1048+
1049+
// insert()
1050+
10391051
#define string_MK_INSERT(CharT) \
10401052
string_nodiscard inline std::basic_string<CharT> \
10411053
insert( \
@@ -1708,6 +1720,7 @@ string_MK_STARTS_WITH ( char )
17081720
string_MK_STARTS_WITH_CHAR ( char )
17091721
string_MK_ENDS_WITH ( char )
17101722
string_MK_ENDS_WITH_CHAR ( char )
1723+
string_MK_ERASE ( char )
17111724
string_MK_INSERT ( char )
17121725
string_MK_REPLACE ( char )
17131726
string_MK_REPLACE_ALL ( char )
@@ -1751,6 +1764,7 @@ string_MK_FIND_FIRST_OF ( wchar_t )
17511764
string_MK_FIND_LAST_OF ( wchar_t )
17521765
string_MK_FIND_FIRST_NOT_OF( wchar_t )
17531766
string_MK_FIND_LAST_NOT_OF ( wchar_t )
1767+
string_MK_ERASE ( wchar_t )
17541768
string_MK_INSERT ( wchar_t )
17551769
string_MK_REPLACE ( wchar_t )
17561770
string_MK_REPLACE_ALL ( wchar_t )
@@ -1794,6 +1808,7 @@ string_MK_FIND_FIRST_OF ( char8_t )
17941808
string_MK_FIND_LAST_OF ( char8_t )
17951809
string_MK_FIND_FIRST_NOT_OF( char8_t )
17961810
string_MK_FIND_LAST_NOT_OF ( char8_t )
1811+
string_MK_ERASE ( char8_t )
17971812
string_MK_INSERT ( char8_t )
17981813
string_MK_REPLACE ( char8_t )
17991814
string_MK_REPLACE_ALL ( char8_t )
@@ -1837,6 +1852,7 @@ string_MK_FIND_FIRST_OF ( char16_t )
18371852
string_MK_FIND_LAST_OF ( char16_t )
18381853
string_MK_FIND_FIRST_NOT_OF( char16_t )
18391854
string_MK_FIND_LAST_NOT_OF ( char16_t )
1855+
string_MK_ERASE ( char16_t )
18401856
string_MK_INSERT ( char16_t )
18411857
string_MK_REPLACE ( char16_t )
18421858
string_MK_REPLACE_ALL ( char16_t )
@@ -1880,6 +1896,7 @@ string_MK_FIND_FIRST_OF ( char32_t )
18801896
string_MK_FIND_LAST_OF ( char32_t )
18811897
string_MK_FIND_FIRST_NOT_OF( char32_t )
18821898
string_MK_FIND_LAST_NOT_OF ( char32_t )
1899+
string_MK_ERASE ( char32_t )
18831900
string_MK_INSERT ( char32_t )
18841901
string_MK_REPLACE ( char32_t )
18851902
string_MK_REPLACE_ALL ( char32_t )
@@ -1923,6 +1940,7 @@ string_MK_SPLIT_LEFT_STRING( char32_t )
19231940
#undef string_MK_FIND_LAST_OF
19241941
#undef string_MK_FIND_FIRST_NOT_OF
19251942
#undef string_MK_FIND_LAST_NOT_OF
1943+
#undef string_MK_ERASE
19261944
#undef string_MK_INSERT
19271945
#undef string_MK_REPLACE
19281946
#undef string_MK_REPLACE_ALL

test/string.t.cpp

Lines changed: 60 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ CASE( "append: string with second string concatenated to first string" )
345345

346346
// substring()
347347

348-
CASE( "substring: substring given position and length" )
348+
CASE( "substring: substring starting at given position of given length, default up to end" )
349349
{
350350
EXPECT( substring("abcxyz", 2, 3) == "cxy" );
351351
EXPECT( substring("abcxyz", 2 ) == "cxyz" );
@@ -360,55 +360,18 @@ CASE( "substring: substring given position and length" )
360360
EXPECT( substring(std17::string_view("abcxyz") ) == "abcxyz" );
361361
}
362362

363-
// strip_left()
364-
365-
CASE( "strip_left: string with characters in set removed from left of string [\" \\t\\n\"]" )
366-
{
367-
EXPECT( strip_left(" \t\nabc", " \t\n") == "abc" );
368-
EXPECT( strip_left(" #$%&abc", " #$%&") == "abc" );
369-
370-
EXPECT( strip_left(std::string(" \t\nabc"), std::string(" \t\n")) == "abc" );
371-
EXPECT( strip_left(std::string(" #$%&abc"), std::string(" #$%&")) == "abc" );
372-
373-
EXPECT( strip_left(std17::string_view(" \t\nabc"), std17::string_view(" \t\n")) == "abc" );
374-
EXPECT( strip_left(std17::string_view(" #$%&abc"), std17::string_view(" #$%&")) == "abc" );
375-
376-
EXPECT( strip_left(stringy(" \t\nabc"), " \t\n") == "abc" );
377-
EXPECT( strip_left(stringy(" #$%&abc"), " #$%&") == "abc" );
378-
}
379-
380-
// strip_right()
381-
382-
CASE( "strip_right: string with characters in set removed from right of string [\" \\t\\n\"]" )
383-
{
384-
EXPECT( strip_right(std::string("abc \t\n"), " \t\n") == "abc" );
385-
EXPECT( strip_right(std::string("abc #$%&"), " #$%&") == "abc" );
386-
387-
EXPECT( strip_right(std::string("abc \t\n"), std::string(" \t\n")) == "abc" );
388-
EXPECT( strip_right(std::string("abc #$%&"), std::string(" #$%&")) == "abc" );
389-
390-
EXPECT( strip_right(std17::string_view("abc \t\n"), std17::string_view(" \t\n")) == "abc" );
391-
EXPECT( strip_right(std17::string_view("abc #$%&"), std17::string_view(" #$%&")) == "abc" );
392-
393-
EXPECT( strip_right(stringy("abc \t\n"), " \t\n") == "abc" );
394-
EXPECT( strip_right(stringy("abc #$%&"), " #$%&") == "abc" );
395-
}
363+
// erase():
396364

397-
// strip()
398-
399-
CASE( "strip: string with characters in set removed from left and right of string [\" \\t\\n\"]" )
365+
CASE( "erase: string with substring at given position of given length removed - default up to end" )
400366
{
401-
EXPECT( strip(" \t\nabc \t\n", " \t\n") == "abc" );
402-
EXPECT( strip(" #$%&abc #$%&", " #$%&") == "abc" );
403-
404-
EXPECT( strip(std::string(" \t\nabc \t\n"), std::string(" \t\n")) == "abc" );
405-
EXPECT( strip(std::string(" #$%&abc #$%&"), std::string(" #$%&")) == "abc" );
367+
EXPECT( erase("abcxyz", 3, 2) == "abcz" );
368+
EXPECT( erase("abcxyz", 3 ) == "abc" );
406369

407-
EXPECT( strip(std17::string_view(" \t\nabc \t\n"), std17::string_view(" \t\n")) == "abc" );
408-
EXPECT( strip(std17::string_view(" #$%&abc #$%&"), std17::string_view(" #$%&")) == "abc" );
370+
EXPECT( erase(std::string("abcxyz"), 3, 2) == "abcz" );
371+
EXPECT( erase(std::string("abcxyz"), 3 ) == "abc" );
409372

410-
EXPECT( strip(stringy(" \t\nabc \t\n"), " \t\n") == "abc" );
411-
EXPECT( strip(stringy(" #$%&abc #$%&"), " #$%&") == "abc" );
373+
EXPECT( erase(std17::string_view("abcxyz"), 3, 2) == "abcz" );
374+
EXPECT( erase(std17::string_view("abcxyz"), 3 ) == "abc" );
412375
}
413376

414377
// insert():
@@ -456,6 +419,57 @@ CASE( "replace_last: string with last occurrence of substring replaced" )
456419
EXPECT( replace_last( std17::string_view("abc123mno123xyz"), std17::string_view("123"), std17::string_view("789")) == "abc123mno789xyz" );
457420
}
458421

422+
// strip_left()
423+
424+
CASE( "strip_left: string with characters in set removed from left of string [\" \\t\\n\"]" )
425+
{
426+
EXPECT( strip_left(" \t\nabc", " \t\n") == "abc" );
427+
EXPECT( strip_left(" #$%&abc", " #$%&") == "abc" );
428+
429+
EXPECT( strip_left(std::string(" \t\nabc"), std::string(" \t\n")) == "abc" );
430+
EXPECT( strip_left(std::string(" #$%&abc"), std::string(" #$%&")) == "abc" );
431+
432+
EXPECT( strip_left(std17::string_view(" \t\nabc"), std17::string_view(" \t\n")) == "abc" );
433+
EXPECT( strip_left(std17::string_view(" #$%&abc"), std17::string_view(" #$%&")) == "abc" );
434+
435+
EXPECT( strip_left(stringy(" \t\nabc"), " \t\n") == "abc" );
436+
EXPECT( strip_left(stringy(" #$%&abc"), " #$%&") == "abc" );
437+
}
438+
439+
// strip_right()
440+
441+
CASE( "strip_right: string with characters in set removed from right of string [\" \\t\\n\"]" )
442+
{
443+
EXPECT( strip_right(std::string("abc \t\n"), " \t\n") == "abc" );
444+
EXPECT( strip_right(std::string("abc #$%&"), " #$%&") == "abc" );
445+
446+
EXPECT( strip_right(std::string("abc \t\n"), std::string(" \t\n")) == "abc" );
447+
EXPECT( strip_right(std::string("abc #$%&"), std::string(" #$%&")) == "abc" );
448+
449+
EXPECT( strip_right(std17::string_view("abc \t\n"), std17::string_view(" \t\n")) == "abc" );
450+
EXPECT( strip_right(std17::string_view("abc #$%&"), std17::string_view(" #$%&")) == "abc" );
451+
452+
EXPECT( strip_right(stringy("abc \t\n"), " \t\n") == "abc" );
453+
EXPECT( strip_right(stringy("abc #$%&"), " #$%&") == "abc" );
454+
}
455+
456+
// strip()
457+
458+
CASE( "strip: string with characters in set removed from left and right of string [\" \\t\\n\"]" )
459+
{
460+
EXPECT( strip(" \t\nabc \t\n", " \t\n") == "abc" );
461+
EXPECT( strip(" #$%&abc #$%&", " #$%&") == "abc" );
462+
463+
EXPECT( strip(std::string(" \t\nabc \t\n"), std::string(" \t\n")) == "abc" );
464+
EXPECT( strip(std::string(" #$%&abc #$%&"), std::string(" #$%&")) == "abc" );
465+
466+
EXPECT( strip(std17::string_view(" \t\nabc \t\n"), std17::string_view(" \t\n")) == "abc" );
467+
EXPECT( strip(std17::string_view(" #$%&abc #$%&"), std17::string_view(" #$%&")) == "abc" );
468+
469+
EXPECT( strip(stringy(" \t\nabc \t\n"), " \t\n") == "abc" );
470+
EXPECT( strip(stringy(" #$%&abc #$%&"), " #$%&") == "abc" );
471+
}
472+
459473
//
460474
// Join, split:
461475
//

0 commit comments

Comments
 (0)