#include <iostream>
#include <vector>
#include <string>
#include <cctype>
// Trim spaces
std::string trim(const std::string& s) {
size_t start = 0;
while (start < s.size() && std::isspace((unsigned char)s[start])) start++;
size_t end = s.size();
while (end > start && std::isspace((unsigned char)s[end - 1])) end--;
return s.substr(start, end - start);
}
// ------------------------------------------------------------
// Parse using custom bracket characters
// Example: parseBracketArray(text, '[', ']');
// ------------------------------------------------------------
std::vector<std::vector<std::string>> parseBracketArray(
const std::string& input,
char openBracket,
char closeBracket)
{
std::vector<std::vector<std::string>> result;
std::vector<std::string> group;
std::string token;
bool inside = false;
for (char ch : input) {
if (ch == openBracket) {
if (!inside) {
inside = true;
group.clear();
token.clear();
}
}
else if (ch == closeBracket) {
if (!token.empty()) {
group.push_back(trim(token));
token.clear();
}
if (inside) {
result.push_back(group);
group.clear();
inside = false;
}
}
else if (ch == ',') {
if (inside) {
if (!token.empty()) {
group.push_back(trim(token));
token.clear();
}
}
}
else {
token.push_back(ch);
}
}
return result;
}
// ------------------------------------------------------------
// Print function
// ------------------------------------------------------------
void printBracketArray(const std::vector<std::vector<std::string>>& arr) {
for (const auto& group : arr) {
std::cout << "[";
for (size_t i = 0; i < group.size(); i++) {
std::cout << "'" << group[i] << "'";
if (i + 1 < group.size()) std::cout << ",";
}
std::cout << "]\n";
}
}
int main() {
std::string str = "[[aa, bbbb], [ccc, dddd, eeeeee], [ffffff]]";
auto parsed = parseBracketArray(str, '[', ']');
printBracketArray(parsed);
}
/*
run:
['aa','bbbb']
['ccc','dddd','eeeeee']
['ffffff']
*/