NYOJ 467 中缀式变后缀式
来源:互联网 发布:淘宝组装电脑店铺 编辑:程序博客网 时间:2024/04/29 10:25
做了表达式求值那道题之后做的
描述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
输入
第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0输出
每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
样例输入
21.000+2/4=((1+2)*5+1)/4=
样例输出
1.000 2 4 / + =1 2 + 5 * 1 + 4 / =
#include <iostream>#include <cstring>#include <string>#include <stack> using namespace std; int prio(char x){ if('+'==x || '-'==x) return 1; else if('*'==x || '/'==x) return 2; return 0;} int main(){ int n,i; string s1,s2; stack<char> s; cin>>n; while(n--) { cin>>s1; s2=""; for(i=0,s.push('=');i<s1.length()-1;i++) { if('('==s1[i]) s.push(s1[i]); else if(')'==s1[i]) { while(s.top()!='(') { s2+=s.top(); s2+=' '; s.pop(); } s.pop(); } else if('+'==s1[i] || '-'==s1[i] || '*'==s1[i] || '/'==s1[i]) { while(prio(s.top())>=prio(s1[i])) //!!!这个地方容易把 prio(s1[i]) 写成 s1[i] { s2+=s.top(); s2+=' '; s.pop(); } s.push(s1[i]); } else { while(isdigit(s1[i]) || '.'== s1[i]) s2+=s1[i++]; i--; s2+=' '; } } while(s.top()!= '=') { s2+=s.top(); s2+=' '; s.pop(); } s2+=s.top(); s.pop(); cout<<s2<<endl; } return 0;}
1 0
- NYOJ 467 中缀式变后缀式
- NYOJ-467 中缀式变后缀式
- 中缀式变后缀式(nyoj 467)
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- nyoj 467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式
- NYOJ--中缀式变后缀式
- NYOJ-467 中缀式变后缀式【逆波兰法】
- NYOJ-467 中缀式变后缀式
- NYOJ 467 中缀式变后缀式【栈】
- nyoj 题目467 中缀式变后缀式
- NYOJ-467-中缀式变后缀式(模拟)
- NYOJ 467 中缀式变后缀式(栈)
- nyoj 467 中缀式变后缀式 nyoj 257 郁闷的C小加(一)
- iOS开发UI基础—27使用UItableview完成一个简单的QQ好友列表(一)
- BC 2015年百度之星程序设计大赛 - 初赛(1)(序列变换-二分答案贪心)
- 3G模块PPPD拨号流程分析
- UCOS-III中的OS_CFG.H 详细解释
- 部署PHP服务器步骤记录(Centos系统)
- NYOJ 467 中缀式变后缀式
- 冒泡排序算法
- NYOJ 44 子串和 (经典的dp问题)
- 开源爬虫软件汇总
- JNI学习积累之一 ---- 常用函数大全
- Android项目打第三方jar包
- iOS开发UI基础—28使用UItableview完成一个简单的QQ好友列表(二)
- 正好最近使用到了,记录PHP错误日志
- Twitter发布新的大数据实时分析系统Heron