#include <iostream>
#include <utility>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
using namespace std;
class NestedVec {
public:
NestedVec() {
valid = false;
_value = 0;
}
explicit NestedVec(int value) {
valid = true;
_value = value;
}
bool isInteger() const {
return valid;
}
int getInteger() const {
return _value;
}
void setInteger(int value) {
valid = true;
_value = value;
}
void add(const NestedVec &ni) {
vn.push_back(ni);
}
[[nodiscard]] const vector<NestedVec> &getList() const {
return vn;
}
private:
bool valid;
int _value;
vector<NestedVec> vn;
};
NestedVec dfs(const string &s, int &pos) {
NestedVec ne;
++pos;
while (pos < s.size()) {
if (isdigit(s[pos]) || s[pos] == '-') {
string cur;
if (s[pos] == '-') {
cur.push_back(s[pos++]);
}
while (isdigit(s[pos])) {
cur.push_back(s[pos++]);
}
ne.add(NestedVec(stoi(cur)));
cur.clear();
}
if (s[pos] == ',' || s[pos] == ' ') {
++pos;
}
if (s[pos] == '[') {
NestedVec temp = dfs(s, pos);
ne.add(temp);
}
if (s[pos] == ']') {
++pos;
break;
}
}
return ne;
}
NestedVec deserialize(string s) {
if (s[0] != '[') {
return NestedVec(stoi(s));
}
int pos = 0;
return dfs(s, pos);
}
vector<int> nestVecToVecOne(const NestedVec &nVec) {
vector<int> res;
for (auto &nv : nVec.getList()) {
res.emplace_back(nv.getInteger());
}
return res;
}
vector<vector<int>> nestVecToVecTwo(const NestedVec &nVec) {
vector<vector<int>> res;
for (int i = 0; i < nVec.getList().size(); ++i) {
res.push_back(nestVecToVecOne(nVec.getList()[i]));
}
return res;
}
vector<vector<vector<int>>> nestVecToVecThree(const NestedVec &nVec) {
vector<vector<vector<int>>> res;
for (int i = 0; i < nVec.getList().size(); ++i) {
res.push_back(nestVecToVecTwo(nVec.getList()[i]));
}
return res;
}
void oneTest() {
string s = "[1,2,3]";
auto x = nestVecToVecOne(deserialize(s));
cout << "一维输出: " << endl;
for (auto v : x) {
cout << v << " ";
}
cout << endl;
}
void twoTest() {
string s = "[[1,2,3], [4, 5, 6], [7, 8, 9]]";
auto x = nestVecToVecTwo(deserialize(s));
cout << "二维输出: " << endl;
for (auto &vec : x) {
for (auto v : vec) {
cout << v << "\t";
}
cout << endl;
}
cout << endl;
}
void threeTest() {
string s = "[[[1,2,3], [4, 5, 6], [7, 8, 9]], [[10,11,12], [13, 14, 15], [16, 17, 18]]]";
auto x = nestVecToVecThree(deserialize(s));
cout << "三维输出: " << endl;
for (auto &vec : x) {
for (auto& ve : vec) {
for (auto v : ve) {
cout << v << "\t";
}
cout << endl;
}
cout << endl;
}
cout << endl;
}
int main() {
oneTest();
twoTest();
threeTest();
}
输出
