PTA 表达式转换 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
2018-03-17 22:54
4155 查看
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。
输入格式:
输入在一行中给出不含空格的中缀表达式,可包含+、
-、
*、
\以及左右括号
(),表达式不超过20个字符。
输出格式:
在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:
2+3*(7-4)+8/4
输出样例:
2 3 7 4 - * + 8 4 / +
#include<iostream> #include<string> #include<map> #include<stack> using namespace std; int main() { string a; stack<char>s; int c=0,printk=0; cin>>a; map<char,int>p; p['*']=p['/']=1; p['(']=p[')']=2; for(int i=0;i<a.length();i++) { if((i<1||a[i-1]=='(')&&(a[i]=='+'||a[i]=='-')||a[i]=='.'||a[i]>='0'&&a[i]<='9') { if(printk) { cout<<" "; } printk++; if(a[i]!='+')cout<<a[i]; while(a[i+1]=='.'||a[i+1]>='0'&&a[i+1]<='9') { i++; cout<<a[i]; } } else { if(a[i]==')') { while(s.size()>0&&s.top()!='(') { cout<<" "<<s.top(); s.pop(); } s.pop(); } else if(s.size()==0||p[a[i]]>p[s.top()]) { s.push(a[i]); } else { while(s.size()>0&&s.top()!='(') { cout<<" "<<s.top(); s.pop(); } s.push(a[i]); } } } while(s.size()) { cout<<" "<<s.top(); s.pop(); } }
相关文章推荐
- 中缀/后缀表达式转换-使用四则混合运算表达式生成树
- 数据结构之 栈和队列---算术表达式的转换(前缀+中缀+后缀)
- [Java算法分析与设计]利用栈操作中缀表达式和后缀表达式的转换和运算
- 中缀/后缀表达式转换-使用四则混合运算表达式生成树
- 中缀表达式转换为后缀表示和前缀表达式的简单方法
- 前缀---中缀--后缀 表达式的相互转换
- (转)前缀、中缀、后缀表达式及转换与应用
- 中缀表达式转换成前缀表达式和后缀表达式 --技巧
- 中缀表达式直接转换为表达式二叉树、前缀表达式、后缀表达式,表达式求值
- 中缀、前缀、后缀表达式之间的转换
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
- 中缀表达式转换成后缀表达式以及逆波兰表示法求值
- [ZZ]中缀表达式转换成前缀表达式和后缀表达式
- 中缀表达式转换为前缀及后缀表达式并求值(java实现)
- 数学运算后缀表达式转换成中缀表达式
- 中缀表达式转换为前缀及后缀表达式并求值【摘】
- 【转】算术表达式中缀形式转后缀形式,并基于后缀式和栈进行计算
- 堆栈的应用(2) 中缀算术表达式到后缀(逆波兰记法reverse polish notation)的转换及其计算 C++实现
- 【转】中缀表达式转换成前缀表达式和后缀表达式
- 二叉树实现运算符优先级算法,支持表达式前缀,中缀,后缀,层次,广义表输出