11namespace StringManip {
13template <std::ctype_base::mask mask>
16 std::ctype<char>
const* myCType;
19 explicit IsNot(std::locale
const& l = std::locale())
20 : myLocale(l), myCType(&std::use_facet<std::ctype<char> >(l)) {}
21 bool operator()(
char ch)
const {
return !myCType->is(mask, ch); }
26inline std::string trim(std::string_view original) {
28 std::find_if(original.rbegin(), original.rend(),
IsNotSpace()).base();
29 auto left = std::find_if(original.begin(), right,
IsNotSpace());
30 return std::string(left, right);
33inline std::vector<std::string> split(std::string_view original,
34 char delimiter =
' ') {
36 std::vector<std::string> strings;
37 auto left = original.begin();
38 for (
auto it = left; it != original.end(); ++it) {
39 if (*it == delimiter) {
40 strings.emplace_back(&*left, it - left);
44 if (left != original.end())
45 strings.emplace_back(&*left, original.end() - left);
48inline std::vector<std::string> split(std::string_view original,
49 std::string_view delimiter) {
51 auto copy_original = trim(original);
52 std::vector<std::string> result;
53 while ((pos = copy_original.find(delimiter)) != std::string::npos) {
54 result.push_back(copy_original.substr(0, pos));
55 copy_original.erase(0, pos + delimiter.length());
57 if (!copy_original.empty()) {
58 result.push_back(copy_original);
65 static std::string ToLowercase(std::string_view s) {
67 std::transform(s.cbegin(), s.cend(), std::back_inserter(result),
68 [](
char const& c) { return std::tolower(c); });
71 static bool contains(std::string
const& v1, std::string
const& v2) {
72 return v1.find(v2) != std::string::npos;
Definition StringManip.h:14
Definition StringManip.h:63