@@ -21,30 +21,66 @@ void string::ltrim(std::string& s) {
2121 s.erase (s.begin (), std::find_if (s.begin (), s.end (), [](char c) { return !std::isspace (c); }));
2222}
2323
24+ std::string_view string::ltrim (std::string_view s) {
25+ while (!s.empty () && std::isspace (s[0 ])) {
26+ s.remove_prefix (1 );
27+ }
28+ return s;
29+ }
30+
2431void string::rtrim (std::string& s) {
2532 s.erase (std::find_if (s.rbegin (), s.rend (), [](char c) { return !std::isspace (c); }).base (), s.end ());
2633}
2734
35+ std::string_view string::rtrim (std::string_view s) {
36+ while (!s.empty () && std::isspace (s[s.size () - 1 ])) {
37+ s.remove_suffix (1 );
38+ }
39+ return s;
40+ }
41+
2842void string::trim (std::string& s) {
2943 rtrim (s);
3044 ltrim (s);
3145}
3246
47+ std::string_view string::trim (std::string_view s) {
48+ return ltrim (rtrim (s));
49+ }
50+
3351void string::ltrim (std::string& s, std::string_view chars) {
3452 s.erase (s.begin (), std::find_if (s.begin (), s.end (), [chars](char c) {
3553 return !contains (chars, c);
3654 }));
3755}
3856
57+ std::string_view string::ltrim (std::string_view s, std::string_view chars) {
58+ while (!s.empty () && contains (chars, s[0 ])) {
59+ s.remove_prefix (1 );
60+ }
61+ return s;
62+ }
63+
3964void string::rtrim (std::string& s, std::string_view chars) {
4065 s.erase (std::find_if (s.rbegin (), s.rend (), [chars](char c) {
4166 return !contains (chars, c);
4267 }).base (), s.end ());
4368}
4469
45- void string::trim (std::string& s, std::string_view c) {
46- rtrim (s, c);
47- ltrim (s, c);
70+ std::string_view string::rtrim (std::string_view s, std::string_view chars) {
71+ while (!s.empty () && contains (chars, s[s.size () - 1 ])) {
72+ s.remove_suffix (1 );
73+ }
74+ return s;
75+ }
76+
77+ void string::trim (std::string& s, std::string_view chars) {
78+ rtrim (s, chars);
79+ ltrim (s, chars);
80+ }
81+
82+ std::string_view string::trim (std::string_view s, std::string_view chars) {
83+ return ltrim (rtrim (s, chars), chars);
4884}
4985
5086// https://stackoverflow.com/a/46931770
@@ -63,10 +99,22 @@ void string::toLower(std::string& input) {
6399 std::transform (input.begin (), input.end (), input.begin (), [](unsigned char c){ return std::tolower (c); });
64100}
65101
102+ std::string string::toLower (std::string_view input) {
103+ std::string out{input};
104+ toLower (out);
105+ return out;
106+ }
107+
66108void string::toUpper (std::string& input) {
67109 std::transform (input.begin (), input.end (), input.begin (), [](unsigned char c){ return std::toupper (c); });
68110}
69111
112+ std::string string::toUpper (std::string_view input) {
113+ std::string out{input};
114+ toUpper (out);
115+ return out;
116+ }
117+
70118std::string string::createRandom (uint16_t length, std::string_view chars) {
71119 std::random_device random_device{};
72120 std::mt19937 generator{random_device ()};
0 commit comments