Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1 s 空间限制:512 MB

#12934. 中缀转前缀

统计

题目描述

平常我们书写的表达式称为中缀表达式,因为它将运算符放在两个操作数中间,许多情况下为了确定运算顺序,括号是不可少的。
前缀标记法:书写表达式时采用运算符前置 ,具体步骤如下 
step1:初始化两个栈s1 和s2 
step2:从右到左依次对中缀表达式中的每个字符进行以下处理,直到表达式结束:
如果字符是‘)’,将其入栈s1中
如果字符是数字,添加到s2中
如果字符是运算符,先将s1栈顶优先级不低于该运算符的运算符出栈,添加到s2中,再将该运算符入栈s1。当‘)’在栈中时,优先级最低
如果字符是‘(’,将s1栈顶元素出栈,添加到s2中,直到出栈的是‘)’ 
step3:如果表达式结束,但栈s1中还有元素,将所有元素出栈,添加s2中 
step4:将栈s2中元素依次出栈,即得到前缀表达式

编写一个程序,完成这个转换,要求输出的每一个数据间都留一个空格。

输入格式:

就一行,是一个中缀表达式。输入的符号中只有这些基本符号  +,-, * / 四种  。
表达式中的基本数字也都是一位的,不会出现形如12形式的数字。
所输入的字符串不要判错。

输出格式:

 前缀表达式

样例数据

input

(4+1*(5-2))-6/3

output

- + 4 * 1 - 5 2 / 6 3