逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
#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]
posted on 2008-03-14 18:24 逛奔的蜗牛 阅读(268) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理