1003. 中缀表达式转后缀表达式
来源:互联网 发布:windows激活密钥 编辑:程序博客网 时间:2024/06/17 04:52
1003. 中缀表达式转后缀表达式
Total:466Accepted:89
Description
将中缀表达式(infix expression)转换为后缀表达式(postfix expression)。假设中缀表达式中的操作数均以单个英文字母表示,且其中只包含双目算术操作符+,-,*,/和%。
Input
表示中缀表达式的一个字符串(其中只包含操作数和操作符,不包含任何其他字符)
Output
表示对应后缀表达式的一个字符串(其中只包含操作数和操作符,不包含任何其他字符)
Sample Input
A+B*C-D-E/F
Sample Output
ABC*+D-EF/-
Problem Source: demo test
#include <iostream>#include <string>#include <stack>using namespace std;bool isoper(char a) { if(a =='+'||a =='-'||a =='*'||a =='/'||a =='%') return true; else return false;}int rank(char a) { if(a =='*'||a =='/'||a =='%') return 3; else return 1;}int main() { stack<char> op; string str; cin >> str; int l = str.length(); for(int i = 0; i < l; i++) { if(!isoper(str[i])) { cout << str[i];} else { if(op.empty()) { op.push(str[i]);} else { while(!op.empty()&&rank(op.top()) >= rank(str[i])) { cout << op.top(); op.pop(); } op.push(str[i]); } } } while(!op.empty()) { cout << op.top(); op.pop(); }}
基本算法,利用栈:
中缀表达式转后缀表达式的算法较为简单,采用栈来实现。规则如下:
<span style="font-family:Microsoft YaHei;font-size:18px;">遇到数字:直接输出遇到'(':压栈遇到')':持续出栈,如果出栈的符号不是'('则输出,否则终止出栈。遇到符号则判断该符号与栈顶符号的运算优先级,如果栈顶符号的运算优先级高,则出栈并输出,直到优先级相等或栈为空;如果栈顶符号的运算优先级低于当前符号的运算优先级,则将当前符号压栈。处理完字符串后将栈中剩余的符号全部输出。</span>
0 0
- 1003. 中缀表达式转后缀表达式
- 1003. 中缀表达式转后缀表达式
- 中缀转后缀表达式
- 表达式中缀转后缀
- 中缀转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 后缀表达式转中缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 中缀表达式转后缀表达式
- 实时监控文本框输入的信息,JS中的oninput & onpropertychange事件
- JSONP 跨域访问
- Make autofill background transparent
- MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
- JDK8新特性
- 1003. 中缀表达式转后缀表达式
- 扩展欧几里得算法(不爽的裁判,uva 12169)
- Android开发tip
- 基于struts2的文件上传下载
- 前端知识框架总结
- 源计划--Tomcat计划(一)
- Select removing dropdown arrow
- C盘根目录下只能创建文件夹不能新建文件的解决办法
- LeetCode 354. Russian Doll Envelopes