ruby实现栈,检查表达式中不匹配的括号

代码1:
#用数组实现栈的数据结构
class Stack 
    def initialize       #栈的初始化 
        @store=[]       #空数组
    end 
     
    def pop                #出栈
        @store.pop        
    end 
     
    def push(x)           #入栈
        @store.push x 
    end 
     
    def peek                #栈顶元素
        @store.last 
    end 
     
    def empty?              #栈是否为空
        @store.empty? 
    end 
end
 
 
def match(peek,char)         #判断栈顶元素与')',']','}'的匹配情况 
    case char 
        when ')' 
        peek=='(' 
        when ']' 
        peek=='[' 
        when '}' 
        peek=='{' 
    end 
end
 
 
puts "Please input an expression:"
str=gets.chomp 
a=str.scan(/./)     #将得到的字符串转换为数组
stack=Stack.new    #新建栈
a.each do |char|     #字符串中的字符进行迭代
    if char=~/\(|\{|\[/     #与'(','[','{'匹配
        stack.push(char)     #进栈
    elsif char=~/\)|\]|\}/     #如果出现与')',']','}'匹配的字符
        if match(stack.peek,char)        #判断栈顶元素与字符的是否对应
            stack.pop          #出栈
        end 
    end 
end 

puts stack.empty?         #如果栈空,匹配
 
 
对于字符串的迭代,并不是str.each就可以实现对字符串中每一个字符迭代的效果。而each_byte的作用是将字符串中的每一个字符的ascii代码对应的整数。譬如
"abc".each_byte do |ele| 

 puts "value: #{ele}, class: #{ele.class} " 

end 
结果是:
value: 97 , class: Fixnum
value: 98 , class: Fixnum
value: 99 , class: Fixnum
 
所以要实现对字符串中每一个字符的迭代,要首先将字符串转化为字符数组
a=str.scan(/./)    




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/115748,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值