5 #ifndef BITCOIN_UTIL_STRING_H
6 #define BITCOIN_UTIL_STRING_H
17 #include <string_view>
20 void ReplaceAll(std::string &in_out,
const std::string &search,
21 const std::string &substitute);
23 [[nodiscard]]
inline std::vector<std::string>
SplitString(std::string_view str,
25 return spanparsing::Split<std::string>(str, sep);
28 [[nodiscard]]
inline std::string
29 TrimString(
const std::string &str,
const std::string &pattern =
" \f\n\r\t\v") {
30 std::string::size_type front = str.find_first_not_of(pattern);
31 if (front == std::string::npos) {
34 std::string::size_type end = str.find_last_not_of(pattern);
35 return str.substr(front, end - front + 1);
38 [[nodiscard]]
inline std::string
RemovePrefix(
const std::string &str,
39 const std::string &
prefix) {
41 return str.substr(
prefix.size());
53 template <
typename T,
typename BaseType,
typename UnaryOp>
54 auto Join(
const std::vector<T> &list,
const BaseType &separator,
55 UnaryOp unary_op) -> decltype(unary_op(list.at(0))) {
56 decltype(unary_op(list.at(0))) ret;
57 for (
size_t i = 0; i < list.size(); ++i) {
61 ret += unary_op(list.at(i));
66 template <
typename T> T
Join(
const std::vector<T> &list,
const T &separator) {
67 return Join(list, separator, [](
const T &i) {
return i; });
72 inline std::string
Join(
const std::vector<std::string> &list,
73 const std::string &separator) {
74 return Join<std::string>(list, separator);
81 return str.size() == strlen(str.c_str());
87 template <
typename T> std::string
ToString(
const T &t) {
88 std::ostringstream oss;
89 oss.imbue(std::locale::classic());
97 template <
typename T1,
size_t PREFIX_LEN>
98 [[nodiscard]]
inline bool
100 return obj.size() >= PREFIX_LEN &&
101 std::equal(std::begin(
prefix), std::end(
prefix), std::begin(obj));
auto Join(const std::vector< T > &list, const BaseType &separator, UnaryOp unary_op) -> decltype(unary_op(list.at(0)))
Join a list of items.
bool ValidAsCString(const std::string &str) noexcept
Check if a string does not contain any embedded NUL (\0) characters.
std::string RemovePrefix(const std::string &str, const std::string &prefix)
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 TrimString(const std::string &str, const std::string &pattern=" \f\n\r\t\v")
std::string ToString(const T &t)
Locale-independent version of std::to_string.
bool HasPrefix(const T1 &obj, const std::array< uint8_t, PREFIX_LEN > &prefix)
Check whether a container begins with the given prefix.