免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9626 | 回复: 4
打印 上一主题 下一主题

大家好!请问用什么办法能把这段文本拆解啊? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-09-03 16:05 |显示全部楼层
数据结构课本 - 栈 - 计算器示例 - 表达式解析

或者 直接正则匹配

论坛徽章:
0
2 [报告]
发表于 2007-09-03 16:30 |显示全部楼层
把括弧压到栈里,以此分隔各段,在各段内做正则匹配。

论坛徽章:
0
3 [报告]
发表于 2007-09-03 16:47 |显示全部楼层
帅锅,我很懒的啊
把左括弧压到栈里,遇到右括弧就弹一个出来,栈空了就说明这一段读完了。

论坛徽章:
0
4 [报告]
发表于 2007-09-03 16:54 |显示全部楼层
等我下班吧

论坛徽章:
0
5 [报告]
发表于 2007-09-03 18:57 |显示全部楼层
#! /usr/bin/perl

use warnings;
use strict;

my @data;
my $stack_point = 0;

# 每段数据开头的标识处理我不写了

# ........


open(FILE, 'file') or die $!;
while (<FILE>) {
    my @characters = split(//);

    for my $c (@characters) {
        push(@data, $c);
        if ($c eq '(') { $stack_point++ }
        elsif ($c eq ')') { $stack_point-- }

        if ($stack_point == 0) {
            # $stack_point 计数为 0 说明一段数据读完

            # 数据在 @data 中,这里该咋办咋办


            @data = (); # 办完后清空

        }
    }
}
close FILE;


刚改了两行代码。说不上先进,别人几十年前发明的。
还是彩色的代码看着爽 , 顺便说下,偶不用 MSN

[ 本帖最后由 redspider 于 2007-9-3 19:06 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP