Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
StringManip.h
1#pragma once
2
3#include <algorithm>
4#include <cstdlib>
5#include <fstream>
6#include <iomanip>
7#include <iostream>
8#include <sstream>
9#include <string>
10#include <vector>
11
12namespace StringManip
13{
14
15template<std::ctype_base::mask mask>
16class IsNot
17{
18 std::locale myLocale; // To ensure lifetime of facet...
19 const std::ctype<char>* myCType;
20
21public:
22 explicit IsNot(const std::locale& l = std::locale()):
23 myLocale(l),
24 myCType(&std::use_facet<std::ctype<char>>(l))
25 {
26 }
27
28 bool operator()(char ch) const
29 {
30 return !myCType->is(mask, ch);
31 }
32};
33
35
36inline std::string trim(std::string_view original)
37{
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);
41}
42
43inline std::vector<std::string> split(std::string_view original, char delimiter = ' ')
44{
45 // TODO C++20 https://en.cppreference.com/w/cpp/ranges/split_view
46 std::vector<std::string> strings;
47 auto left = original.begin();
48 for (auto it = left; it != original.end(); ++it)
49 {
50 if (*it == delimiter)
51 {
52 strings.emplace_back(&*left, it - left);
53 left = it + 1;
54 }
55 }
56 if (left != original.end())
57 {
58 strings.emplace_back(&*left, original.end() - left);
59 }
60 return strings;
61}
62
63inline std::vector<std::string> split(std::string_view original, std::string_view delimiter)
64{
65 size_t pos = 0;
66 auto copy_original = trim(original);
67 std::vector<std::string> result;
68 while ((pos = copy_original.find(delimiter)) != std::string::npos)
69 {
70 result.push_back(copy_original.substr(0, pos));
71 copy_original.erase(0, pos + delimiter.length());
72 }
73 if (!copy_original.empty())
74 {
75 result.push_back(copy_original);
76 }
77 return result;
78}
79
81{
82public:
83 static std::string ToLowercase(std::string_view s)
84 {
85 std::string result;
86 std::transform(s.cbegin(),
87 s.cend(),
88 std::back_inserter(result),
89 [](const char& c) { return std::tolower(c); });
90 return result;
91 }
92
93 static bool contains(const std::string& v1, const std::string& v2)
94 {
95 return v1.find(v2) != std::string::npos;
96 }
97};
98} // namespace StringManip
Definition StringManip.h:17
Definition StringManip.h:81