15template<std::ctype_base::mask mask>
19 const std::ctype<char>* myCType;
22 explicit IsNot(
const std::locale& l = std::locale()):
24 myCType(&std::use_facet<std::ctype<char>>(l))
28 bool operator()(
char ch)
const
30 return !myCType->is(mask, ch);
36inline std::string trim(std::string_view original)
38 auto right = std::find_if(original.rbegin(), original.rend(),
IsNotSpace()).base();
39 auto left = std::find_if(original.begin(), right,
IsNotSpace());
40 return std::string(left, right);
43inline std::vector<std::string> split(std::string_view original,
char delimiter =
' ')
46 std::vector<std::string> strings;
47 auto left = original.begin();
48 for (
auto it = left; it != original.end(); ++it)
52 strings.emplace_back(&*left, it - left);
56 if (left != original.end())
58 strings.emplace_back(&*left, original.end() - left);
63inline std::vector<std::string> split(std::string_view original, std::string_view delimiter)
66 auto copy_original = trim(original);
67 std::vector<std::string> result;
68 while ((pos = copy_original.find(delimiter)) != std::string::npos)
70 result.push_back(copy_original.substr(0, pos));
71 copy_original.erase(0, pos + delimiter.length());
73 if (!copy_original.empty())
75 result.push_back(copy_original);
83 static std::string ToLowercase(std::string_view s)
86 std::transform(s.cbegin(),
88 std::back_inserter(result),
89 [](
const char& c) { return std::tolower(c); });
93 static bool contains(
const std::string& v1,
const std::string& v2)
95 return v1.find(v2) != std::string::npos;
Definition StringManip.h:17
Definition StringManip.h:81