#include <iostream>
#include <cstdlib>
#include <stack>
/**
* Application entry
*/
int main(int argc, char *argv[]) {
std::string str = "a[]b[c[f[]]d[]]";
std::string result; // 保存结果
std::stack<char> stack;
stack.push('$'); // 开始的标志,可用可不用
size_t index = 0;
size_t length = str.size();
for (index = 0; index < length; ++index) {
// 如果不是],则压入栈中
if (str.at(index) != ']') {
stack.push(str.at(index));
if ('[' == str.at(index)) {
result += "['TREE', ["; // 树结构的前半部分
}
} else { // 是],说明一个树或者一个子树已经结束,那么构造完这棵树
if ('$' == stack.top()) {
break;
}
// 处理[时的构造结构
if ('[' == stack.top()) {
result += "], ";
stack.pop();
}
// 片面是处理树的名字,在这里用了最简单的处理,只处理了一个字母的
// 其实名字应该是可以有多个字母,这时,用一个循环来解决,而且要注意
// 的是压入栈的,所以读出来的时候名字是反的,所以再反过来就好了.
result.append(1, stack.top());
result += "]";
stack.pop();
}
}
std::cout << result << std::endl;
return EXIT_SUCCESS;
}
输出结果:
['TREE', [], a]['TREE', [['TREE', [['TREE', [], f]], c]['TREE', [], d]], b]