OGS
StringTools.h
Go to the documentation of this file.
1
15#pragma once
16
17#include <cstddef>
18#include <list>
19#include <range/v3/range/conversion.hpp>
20#include <range/v3/view/istream.hpp>
21#include <sstream>
22#include <string>
23#include <string_view>
24#include <vector>
25
26namespace BaseLib
27{
35std::vector<std::string> splitString(std::string const& str);
36
43std::list<std::string> splitString(const std::string& str, char delim);
44
52std::string replaceString(const std::string& searchString,
53 const std::string& replaceString,
54 std::string stringToReplace);
55
62template <typename T>
63T str2number(const std::string& str)
64{
65 std::stringstream strs(str, std::stringstream::in | std::stringstream::out);
66 T v;
67 strs >> v;
68 return v;
69}
70
75void trim(std::string& str, char ch = ' ');
76
81void simplify(std::string& str);
82
84std::string randomString(std::size_t length);
85
87std::string getUniqueName(std::vector<std::string> const& existing_names,
88 std::string const& input_name);
89
94template <typename T>
95std::optional<std::vector<T>> tryParseVector(std::string const& raw,
96 std::size_t* bad_token_idx)
97{
98 std::istringstream iss{raw};
99
100 // Create a range that reads T values from the stream
101 auto values = ranges::istream_view<T>(iss);
102 std::vector<T> out = ranges::to<std::vector>(values);
103
104 // Check if we consumed the entire input
105 if (!iss.eof())
106 {
107 if (bad_token_idx)
108 {
109 *bad_token_idx = out.size() + 1;
110 }
111 return std::nullopt;
112 }
113 return out;
114}
115
116} // end namespace BaseLib
void simplify(std::string &str)
std::optional< std::vector< T > > tryParseVector(std::string const &raw, std::size_t *bad_token_idx)
Definition StringTools.h:95
std::string randomString(std::size_t const length)
Returns a random string of the given length containing just a-z,A-Z,0-9.
std::string getUniqueName(std::vector< std::string > const &existing_names, std::string const &input_name)
Append '-' and a number such that the name is unique.
std::string replaceString(const std::string &searchString, const std::string &replaceString, std::string stringToReplace)
void trim(std::string &str, char ch)
std::vector< std::string > splitString(std::string const &str)
T str2number(const std::string &str)
Definition StringTools.h:63