#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]