16template<std::ctype_base::mask mask>
20 const std::ctype<char>* myCType;
23 explicit IsNot(
const std::locale& l = std::locale()):
25 myCType(&std::use_facet<std::ctype<char>>(l))
29 bool operator()(
char ch)
const
31 return !myCType->is(mask, ch);
43inline std::string& trim_in_place(std::string& original)
47 std::ranges::find_if(original | std::ranges::views::reverse,
IsNotSpace()).base(),
49 original.erase(original.begin(), std::ranges::find_if(original,
IsNotSpace()));
53inline std::string trim(std::string_view original)
55 auto right = std::find_if(original.rbegin(), original.rend(), IsNotSpace()).base();
56 auto left = std::find_if(original.begin(), right, IsNotSpace());
57 return std::string(left, right);
60inline std::vector<std::string> split(std::string_view original,
char delimiter =
' ')
63 std::vector<std::string> strings;
64 auto left = original.begin();
65 for (
auto it = left; it != original.end(); ++it)
69 strings.emplace_back(&*left, it - left);
73 if (left != original.end())
75 strings.emplace_back(&*left, original.end() - left);
80inline std::vector<std::string> split(std::string_view original, std::string_view delimiter)
83 auto copy_original = trim(original);
84 std::vector<std::string> result;
85 while ((pos = copy_original.find(delimiter)) != std::string::npos)
87 result.push_back(copy_original.substr(0, pos));
88 copy_original.erase(0, pos + delimiter.length());
90 if (!copy_original.empty())
92 result.push_back(copy_original);
100 static std::string ToLowercase(std::string_view s)
103 std::transform(s.cbegin(),
105 std::back_inserter(result),
106 [](
const char& c) { return std::tolower(c); });
110 static bool contains(
const std::string& v1,
const std::string& v2)
112 return v1.find(v2) != std::string::npos;
Definition StringManip.h:18
Definition StringManip.h:98