12 inline std::vector<std::string>
split(
const std::string& s,
char delimiter)
14 std::vector<std::string> tokens;
16 std::istringstream stream(s);
17 while (std::getline(stream, token, delimiter))
18 tokens.push_back(token);
22 inline std::vector<std::string>
split(
const std::string& s,
const std::string& delimiter)
24 std::vector<std::string> tokens;
27 while ((end = s.find(delimiter, start)) != std::string::npos)
29 tokens.push_back(s.substr(start, end - start));
30 start = end + delimiter.size();
32 tokens.push_back(s.substr(start));
36 inline std::string
toLower(
const std::string& s)
38 std::string result = s;
39 std::transform(result.begin(), result.end(), result.begin(),
40 [](
unsigned char c) { return static_cast<char>(std::tolower(c)); });
46 const auto it = std::search(s.begin(), s.end(), substr.begin(), substr.end(),
47 [](
unsigned char a,
unsigned char b) { return std::tolower(a) == std::tolower(b); });
53 if (prefix.size() > s.size())
return false;
54 return std::equal(prefix.begin(), prefix.end(), s.begin(),
55 [](
unsigned char a,
unsigned char b) { return std::tolower(a) == std::tolower(b); });
60 if (suffix.size() > s.size())
return false;
61 return std::equal(suffix.rbegin(), suffix.rend(), s.rbegin(),
62 [](
unsigned char a,
unsigned char b) { return std::tolower(a) == std::tolower(b); });
65 inline int safeStoi(
const std::string& s,
int fallback = 0)
67 if (s.empty())
return fallback;
68 try {
return std::stoi(s); }
69 catch (...) {
return fallback; }
Common string utility functions (split, case-insensitive search, etc.).
std::vector< std::string > split(const std::string &s, char delimiter)
Split a string by a single-character delimiter.
bool containsIgnoreCase(const std::string &s, const std::string &substr)
bool startsWithIgnoreCase(const std::string &s, const std::string &prefix)
bool endsWithIgnoreCase(const std::string &s, const std::string &suffix)
std::string toLower(const std::string &s)
int safeStoi(const std::string &s, int fallback=0)