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 <expected>
8#include <list>
9#include <optional>
10#include <range/v3/range/conversion.hpp>
11#include <range/v3/view/istream.hpp>
12#include <sstream>
13#include <string>
14#include <string_view>
15#include <vector>
16
17namespace BaseLib
18{
26std::vector<std::string> splitString(std::string const& str);
27
34std::list<std::string> splitString(const std::string& str, char delim);
35
43std::string replaceString(const std::string& searchString,
44 const std::string& replaceString,
45 std::string stringToReplace);
46
53template <typename T>
54T str2number(const std::string& str)
55{
56 std::stringstream strs(str, std::stringstream::in | std::stringstream::out);
57 T v;
58 strs >> v;
59 return v;
60}
61
66void trim(std::string& str, char ch = ' ');
67
72void simplify(std::string& str);
73
75std::string randomString(std::size_t length);
76
78std::string getUniqueName(std::vector<std::string> const& existing_names,
79 std::string const& input_name);
80
85template <typename T>
86std::optional<std::vector<T>> tryParseVector(std::string const& raw,
87 std::size_t* bad_token_idx)
88{
89 std::istringstream iss{raw};
90
91 // Create a range that reads T values from the stream
92 auto values = ranges::istream_view<T>(iss);
93 std::vector<T> out = ranges::to<std::vector>(values);
94
95 // Check if we consumed the entire input
96 if (!iss.eof())
97 {
98 if (bad_token_idx)
99 {
100 *bad_token_idx = out.size() + 1;
101 }
102 return std::nullopt;
103 }
104 return out;
105}
106
109std::expected<int, std::string> parseInteger(std::string_view str);
110
111} // end namespace BaseLib
void simplify(std::string &str)
std::expected< int, std::string > parseInteger(std::string_view str)
std::optional< std::vector< T > > tryParseVector(std::string const &raw, std::size_t *bad_token_idx)
Definition StringTools.h:86
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:54