OGS
StringTools.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <cstddef>
7#include <list>
8#include <optional>
9#include <range/v3/range/conversion.hpp>
10#include <range/v3/view/istream.hpp>
11#include <sstream>
12#include <string>
13#include <string_view>
14#include <vector>
15
16namespace BaseLib
17{
25std::vector<std::string> splitString(std::string const& str);
26
33std::list<std::string> splitString(const std::string& str, char delim);
34
42std::string replaceString(const std::string& searchString,
43 const std::string& replaceString,
44 std::string stringToReplace);
45
52template <typename T>
53T str2number(const std::string& str)
54{
55 std::stringstream strs(str, std::stringstream::in | std::stringstream::out);
56 T v;
57 strs >> v;
58 return v;
59}
60
65void trim(std::string& str, char ch = ' ');
66
71void simplify(std::string& str);
72
74std::string randomString(std::size_t length);
75
77std::string getUniqueName(std::vector<std::string> const& existing_names,
78 std::string const& input_name);
79
84template <typename T>
85std::optional<std::vector<T>> tryParseVector(std::string const& raw,
86 std::size_t* bad_token_idx)
87{
88 std::istringstream iss{raw};
89
90 // Create a range that reads T values from the stream
91 auto values = ranges::istream_view<T>(iss);
92 std::vector<T> out = ranges::to<std::vector>(values);
93
94 // Check if we consumed the entire input
95 if (!iss.eof())
96 {
97 if (bad_token_idx)
98 {
99 *bad_token_idx = out.size() + 1;
100 }
101 return std::nullopt;
102 }
103 return out;
104}
105
106} // 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:85
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:53