38#include <initializer_list>
57 std::string
ltrim(std::string str)
59 auto it = std::find_if(str.begin(), str.end(),
60 [](
unsigned char uc) ->
bool
61 { return !isspace(uc); });
62 str.erase(str.begin(), it);
71 std::string
rtrim(std::string str)
73 auto it = std::find_if(str.rbegin(), str.rend(),
74 [](
unsigned char uc) ->
bool
75 { return !isspace(uc); });
76 str.erase(it.base(), str.end());
85 std::string
trim(std::string str)
96 std::string
ltrim(std::string str,
const std::string &chars)
98 auto it = std::find_if(str.begin(), str.end(),
99 [&chars](
unsigned char ch)
101 return chars.find(ch) == std::string::npos;
103 str.erase(str.begin(), it);
113 std::string
rtrim(std::string str,
const std::string &chars)
115 auto it = std::find_if(str.rbegin(), str.rend(),
116 [&chars](
unsigned char ch)
118 return chars.find(ch) == std::string::npos;
120 str.erase(it.base(), str.end());
130 std::string
trim(std::string str,
const std::string &chars)
144 if (ch >=
'a' && ch <=
'z')
159 if (ch >=
'A' && ch <=
'Z')
174 if (str[0] >=
'a' && str[0] <=
'z')
176 for (
size_t i = 1; i < str.size(); ++i)
178 if (isspace((
unsigned char)str[i - 1]) &&
179 str[i] >=
'a' && str[i] <=
'z')
181 else if (str[i] >=
'A' && str[i] <=
'Z')
206 return os <<
"(\"" << pr.
left <<
"\", \"" << pr.
middle
207 <<
"\", \"" << pr.
right <<
"\")";
219 const std::string &text,
const std::string &sep)
221 size_t pos = text.find(sep);
222 if (pos == std::string::npos)
227 text.substr(pos + sep.size())};
238 std::string text,
const std::string &sep =
" ")
240 std::vector<std::string> vec;
242 while ((pr =
partition(text, sep)).middle !=
"")
244 vec.push_back(pr.
left);
247 vec.push_back(pr.
left);
260 const std::vector<T> &vec,
const std::string &sep =
"")
264 std::stringstream ss;
265 auto it = vec.begin();
267 while (++it != vec.end())
280 template <
class... Args>
283 std::ostringstream oss;
284 int _[] = {0, (oss << std::forward<Args>(args), 0)...};
304 using std::string::string;
317 if (result.middle ==
"{}")
319 return result.left +
uni_to_str(t) + result.right;
格式化字符串类,支持使用 % 运算符进行占位符 {} 替换。
Definition strpp.h:302
f_string operator%(const T &t)
用参数替换第一个 {} 占位符。
Definition strpp.h:314
定义 console 库使用的自定义异常类层次结构。
std::string lower(std::string str)
将字符串转换为小写。
Definition strpp.h:155
PartitionResult partition(const std::string &text, const std::string &sep)
在字符串中查找第一个分隔符,并返回分隔符之前、分隔符本身、分隔符之后的三部分。
Definition strpp.h:218
std::string uni_to_str(Args &&...args)
将任意多个参数转换为字符串并拼接(无分隔符)。
Definition strpp.h:281
std::vector< std::string > split(std::string text, const std::string &sep=" ")
以分隔符分割字符串(类似 Python 的 split,默认按空格分割)。
Definition strpp.h:237
std::string rtrim(std::string str)
移除字符串右侧的空白字符。
Definition strpp.h:71
std::string title(std::string str)
将字符串转换为标题格式(每个单词首字母大写,其余小写)。
Definition strpp.h:170
std::string ltrim(std::string str)
移除字符串左侧的空白字符(空格、制表符等)。
Definition strpp.h:57
std::string upper(std::string str)
将字符串转换为大写。
Definition strpp.h:140
std::string join(const std::vector< T > &vec, const std::string &sep="")
以分隔符连接容器中的字符串元素。
Definition strpp.h:259
std::string trim(std::string str)
移除字符串两侧的空白字符。
Definition strpp.h:85
提供 STL 容器的格式化输出和灵活的输出控制工具。
字符串分区结果,包含左部分、分隔符、右部分。
Definition strpp.h:192
friend std::ostream & operator<<(std::ostream &os, const PartitionResult &pr)
输出分区结果到流,格式为 ("left", "middle", "right")。
Definition strpp.h:203
std::string middle
分隔符本身
Definition strpp.h:194
std::string left
分隔符前的子串
Definition strpp.h:193
std::string right
分隔符后的子串
Definition strpp.h:195