求助:除去成对的括号
时间:2011-02-19
来源:互联网
设最外层括号为第 1 层,请问怎么样能够除去 1 对第 2 层的括号,保留其他括号?
谢谢!
例如:
复制代码
谢谢!
例如:
- (((1,2),3),4) => ((1,2),3,4)
-
- ((1,2),(3,4)) => ((1,2),3,4)
- or
- (1,2,(3,4))
-
- (1,(2,(3,4))) => (1,2,(3,4))
作者: longbow0 发布时间: 2011-02-19
基本能够完成任务的代码,请各位指正。
复制代码
输出
复制代码
- #!/usr/bin/perl
-
- use strict;
- use warnings;
-
- while (<DATA>) {
- next if /^#/;
- next if /^\s*$/;
- chomp;
-
- print $_, "==>\n";
-
- my ($lnode, $rnode) = getNodes($_);
-
- if ($lnode =~ /^\(/) {
- my $str = $lnode;
-
- my ($lnode, $mnode) = getNodes($str);
-
- print join(',', ($lnode, $mnode, $rnode)), "\n";
- }
- else {
- my $str = $rnode;
-
- my ($mnode, $rnode) = getNodes($str);
-
- print join(',', ($lnode, $mnode, $rnode)), "\n";
- }
- }
-
- =begin
- Name: getNodes
- Desc: Get 2 nodes of a binary tree
- Usage: getNodes($str)
- Args: A string
- Return: 2 strings
- =cut
-
- sub getNodes {
- my ($str) = @_;
-
- # Remove leading and tailing parentheses
- # $str =~ s/^\(|\)$//g;
-
- # '((1,2),3)'
- if ($str =~ /^\((\(.+\)),(\w+)\)$/) {
- # print "L\n";
- return ($1, $2);
- }
- # '((1,2),(3,4))'
- elsif ($str =~ /^\((\(.+\)),(\(.+\))\)$/) {
- # print "M\n";
- return ($1, $2);
- }
- # '(1,(2,3))'
- elsif ($str =~ /^\((\w+),(\(.+\))\)$/) {
- # print "R\n";
- return ($1, $2);
- }
- # '(1,2)'
- elsif ($str =~ /^\((\w+),(\w+)\)$/) {
- return ($1, $2);
- }
- else {
- print "Error!\n";
- return (0, 0);
- }
- }
-
- __DATA__
- (((1,2),3),4)
- ((1,2),(3,4))
- (1,(2,(3,4)))
- ((1,2),(3,(4,5)))
- (((((1,2),3),4),(5,6))
- (((1,2),3),4)==>
- (1,2),3,4
- ((1,2),(3,4))==>
- 1,2,(3,4)
- (1,(2,(3,4)))==>
- 1,2,(3,4)
- ((1,2),(3,(4,5)))==>
- 1,2,(3,(4,5))
- (((((1,2),3),4),(5,6))==>
- (((1,2),3),4,(5,6)
作者: longbow0 发布时间: 2011-02-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28