#include <iostream>
#include <string>
#include <vector>
bool isDelimChar(char c, const std::vector<std::string_view>& delims) {
for (auto d : delims) {
if (!d.empty() && d[0] == c)
return true;
}
return false;
}
std::vector<std::string> splitKeepMultiDelims(
std::string_view s,
const std::vector<std::string_view>& delims)
{
std::vector<std::string> result;
size_t pos = 0;
while (pos < s.size()) {
char c = s[pos];
if (isDelimChar(c, delims)) {
// Count repeated delimiter characters
size_t start = pos;
while (pos < s.size() && s[pos] == c)
pos++;
result.emplace_back(s.substr(start, pos - start));
}
else {
// Accumulate normal text until next delimiter run
size_t start = pos;
while (pos < s.size() && !isDelimChar(s[pos], delims))
pos++;
result.emplace_back(s.substr(start, pos - start));
}
}
return result;
}
int main() {
std::string s = "aa==bbb---cccc++++ddddd";
std::vector<std::string_view> delims = {"=", "-", "+"};
auto parts = splitKeepMultiDelims(s, delims);
for (auto& p : parts) {
std::cout << "[" << p << "] ";
}
}
/*
run:
[aa] [==] [bbb] [---] [cccc] [++++] [ddddd]
*/