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>
11namespace StringManip {
12
13template <std::ctype_base::mask mask>
14class IsNot {
15 std::locale myLocale; // To ensure lifetime of facet...
16 std::ctype<char> const* myCType;
17
18 public:
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); }
22};
23
25
26inline std::string trim(std::string_view original) {
27 auto right =
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);
31}
32
33inline std::vector<std::string> split(std::string_view original,
34 char delimiter = ' ') {
35 // TODO C++20 https://en.cppreference.com/w/cpp/ranges/split_view
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);
41 left = it + 1;
42 }
43 }
44 if (left != original.end())
45 strings.emplace_back(&*left, original.end() - left);
46 return strings;
47}
48inline std::vector<std::string> split(std::string_view original,
49 std::string_view delimiter) {
50 size_t pos = 0;
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());
56 }
57 if (!copy_original.empty()) {
58 result.push_back(copy_original);
59 }
60 return result;
61}
62
64 public:
65 static std::string ToLowercase(std::string_view s) {
66 std::string result;
67 std::transform(s.cbegin(), s.cend(), std::back_inserter(result),
68 [](char const& c) { return std::tolower(c); });
69 return result;
70 }
71 static bool contains(std::string const& v1, std::string const& v2) {
72 return v1.find(v2) != std::string::npos;
73 }
74};
75} // namespace StringManip
Definition StringManip.h:14
Definition StringManip.h:63