5 #ifndef BITCOIN_UTIL_STRING_H
6 #define BITCOIN_UTIL_STRING_H
16 #include <string_view>
19 void ReplaceAll(std::string& in_out,
const std::string& search,
const std::string& substitute);
21 [[nodiscard]]
inline std::vector<std::string>
SplitString(std::string_view str,
char sep)
23 return spanparsing::Split<std::string>(str, sep);
26 [[nodiscard]]
inline std::vector<std::string>
SplitString(std::string_view str, std::string_view separators)
28 return spanparsing::Split<std::string>(str, separators);
31 [[nodiscard]]
inline std::string_view
TrimStringView(std::string_view str, std::string_view pattern =
" \f\n\r\t\v")
33 std::string::size_type front = str.find_first_not_of(pattern);
34 if (front == std::string::npos) {
37 std::string::size_type end = str.find_last_not_of(pattern);
38 return str.substr(front, end - front + 1);
41 [[nodiscard]]
inline std::string
TrimString(std::string_view str, std::string_view pattern =
" \f\n\r\t\v")
49 return str.substr(
prefix.size());
67 template <
typename C,
typename S,
typename UnaryOp>
68 auto Join(
const C& container,
const S& separator, UnaryOp unary_op)
70 decltype(unary_op(*container.begin()))
ret;
72 for (
const auto& item : container) {
73 if (!first)
ret += separator;
74 ret += unary_op(item);
80 template <
typename C,
typename S>
81 auto Join(
const C& container,
const S& separator)
83 return Join(container, separator, [](
const auto& i) {
return i; });
91 return Join(items,
"\n", [](
const std::string& item) {
return "- " + item; });
100 if (c == 0)
return false;
108 template <
typename T>
111 std::ostringstream oss;
112 oss.imbue(std::locale::classic());
120 template <
typename T1,
size_t PREFIX_LEN>
122 const std::array<uint8_t, PREFIX_LEN>&
prefix)
124 return obj.size() >= PREFIX_LEN &&
125 std::equal(std::begin(
prefix), std::end(
prefix), std::begin(obj));
#define S(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
std::string TrimString(std::string_view str, std::string_view pattern=" \f\n\r\t\v")
std::string RemovePrefix(std::string_view str, std::string_view prefix)
std::string MakeUnorderedList(const std::vector< std::string > &items)
Create an unordered multi-line list of items.
std::vector< std::string > SplitString(std::string_view str, char sep)
void ReplaceAll(std::string &in_out, const std::string &search, const std::string &substitute)
std::string_view RemovePrefixView(std::string_view str, std::string_view prefix)
bool ContainsNoNUL(std::string_view str) noexcept
Check if a string does not contain any embedded NUL (\0) characters.
std::string ToString(const T &t)
Locale-independent version of std::to_string.
std::string_view TrimStringView(std::string_view str, std::string_view pattern=" \f\n\r\t\v")
bool HasPrefix(const T1 &obj, const std::array< uint8_t, PREFIX_LEN > &prefix)
Check whether a container begins with the given prefix.
auto Join(const C &container, const S &separator, UnaryOp unary_op)
Join all container items.