feat add StrSpilt,Trim,TrimLeft,TrimRight
All checks were successful
linux-x64-gcc / linux-gcc (Debug) (push) Successful in 36s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 36s

This commit is contained in:
tqcq 2024-03-03 11:13:46 +08:00
parent 3dccac62b7
commit abc1a88bd0
2 changed files with 55 additions and 0 deletions

View File

@ -1,6 +1,8 @@
#pragma once
#ifndef SLED_STRINGS_UTILS_H
#define SLED_STRINGS_UTILS_H
#include <string>
#include <vector>
namespace sled {
@ -10,6 +12,14 @@ std::string ToHex(const std::string &str);
std::string StrJoin(const std::vector<std::string> &strings,
const std::string &delim,
bool skip_empty = false);
std::vector<std::string> StrSplit(const std::string &str,
const std::string &delim,
bool skip_empty = false);
std::string Trim(const std::string &str, const std::string &chars = " \t\n\r");
std::string TrimLeft(const std::string &str,
const std::string &chars = " \t\n\r");
std::string TrimRight(const std::string &str,
const std::string &chars = " \t\n\r");
}// namespace sled
#endif// SLED_STRINGS_UTILS_H

View File

@ -20,4 +20,49 @@ StrJoin(const std::vector<std::string> &strings,
}
return ss.str();
}
std::vector<std::string>
StrSplit(const std::string &str, const std::string &delim, bool skip_empty)
{
std::vector<std::string> result;
if (str.empty()) { return result; }
size_t start = 0;
size_t next_pos = str.find_first_of(delim, start);
while (next_pos != std::string::npos) {
if (!skip_empty || next_pos > start) {
result.emplace_back(str.substr(start, next_pos - start));
}
start = next_pos + 1;
next_pos = str.find_first_of(delim, start);
}
if (start < str.size()) { result.emplace_back(str.substr(start)); }
return result;
}
std::string
Trim(const std::string &str, const std::string &chars)
{
return TrimLeft(TrimRight(str));
}
std::string
TrimLeft(const std::string &str, const std::string &chars)
{
size_t start = 0;
while (start < str.size() && chars.find(str[start]) != std::string::npos) {
++start;
}
return str.substr(start);
}
std::string
TrimRight(const std::string &str, const std::string &chars)
{
size_t end = str.size();
while (end > 0 && chars.find(str[end - 1]) != std::string::npos) { --end; }
return str.substr(0, end);
}
}// namespace sled