27 namespace stringutils {
41 [[nodiscard]]
static inline std::string
ltrim(std::string text) {
42 text.erase(text.begin(),
43 std::find_if(text.begin(), text.end(), [](
int c) { return !std::isspace(c); }));
51 [[nodiscard]]
static inline std::string
rtrim(std::string text) {
53 std::find_if(text.rbegin(), text.rend(), [](
int c) { return !std::isspace(c); }).base(),
63 [[nodiscard]]
static inline std::string
trim(std::string text) {
73 [[nodiscard]]
static inline std::string
remove_character(std::string text,
const char c) {
74 text.erase(std::remove(text.begin(), text.end(), c), text.end());
83 [[nodiscard]]
static inline std::string
trim_newline(std::string text) {
92 [[nodiscard]]
static inline std::string
escape_quotes(
const std::string& text) {
116 [[nodiscard]]
static inline std::vector<std::string>
split_string(
const std::string& text,
118 std::vector<std::string> elements;
119 std::stringstream ss(text);
122 while (std::getline(ss, item, delimiter)) {
123 elements.push_back(item);
135 static inline bool ends_with(
const std::string& haystack,
const std::string& needle) {
136 if (needle.empty()) {
140 auto n_chars = needle.size();
141 if (haystack.size() < n_chars) {
145 auto haystack_begin = haystack.begin() + haystack.size() - n_chars;
146 return std::equal(haystack_begin, haystack.end(), needle.begin(), needle.end());
154 static inline bool starts_with(
const std::string& haystack,
const std::string& needle) {
155 return haystack.rfind(needle, 0) == 0;
167 [[nodiscard]]
static inline std::string
align_text(
const std::string& text,
174 const int padding = width -
static_cast<int>(text.size());
178 right = std::string(padding,
' ');
180 left = std::string(padding,
' ');
182 left = std::string(padding / 2,
' ');
183 right = std::string(padding / 2,
' ');
185 if (padding % 2 != 0) {
198 [[nodiscard]]
static inline std::string
tolower(std::string text) {
199 std::transform(text.begin(), text.end(), text.begin(), ::
tolower);
211 std::string
to_string(
double value,
const std::string& format_spec =
"{:.16g}");
217 std::string
join_arguments(
const std::string& lhs,
const std::string& rhs);