SPOJ 4. Transform the Expression

将中缀表达式转换为后缀表达式,大家应该都很熟悉。具体过程为先为可能出现的括号和操作符('(','+','-','*','/‘,'^'等)赋一个优先级,其中'('优先级最低。然后顺次扫描输入的表达式(即字符串),

1. 碰到'('时,直接入栈

2. 碰到操作符时,如果优先级大于栈顶操作符的优先级,则入栈,否则将其直接输出

3. 碰到')'时,将栈中的所有操作符出栈直到碰到'('时为止,但并不输出'('

4. 对于操作数直接输出

算法涉及四种输入(左括号,右括号,操作符和操作数)和两种操作(入栈和持续出栈)。另外就是语言方面,python的print默认是换行的,虽然在语句后加逗号可以在同一行,但是会在逗号后加一个空格,如果要既不换行也不加空格,网上的方法都是用sys.stdout.write()。此外,input()和raw_input()最大的区别就是input()返回一个整数而raw_input()返回的是字符串。要访问字符串中的每个字符,在python中可以直接用for c in str。

import sys

priority={'(':0,'+':1,'-':2,'*':3,'/':4,'^':5}
stack=[]
t=input()
while t:
    exp=raw_input()
    for c in exp:
        if c=='(':
            stack.append(c)
        elif c==')':
            while 1:
                p=stack.pop()
                if p<>'(':
                    sys.stdout.write(p)
                else:
                    break;
        elif c=='+' or c=='-' or c=='*' or c=='/' or c=='^':
            if priority[c]>priority[stack[-1]]:
                stack.append(c)
            else:
                sys.stdout.write(c)
        else:
            sys.stdout.write(c)
    print
    t=t-1



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值