infix to postfix 完整版
2024-10-19 06:23:02
#include<iostream>
#include<stack>
#include<string>
#include<deque>
using namespace std; char compare(char tp, char op)
{
if (((tp == '+' || tp == '-') && (op == '*' || op == '/')) || (tp == '#'))
return '<';
else if (tp == '('&&op != ')')
return '<';
else if ((tp == '*' || tp == '/' || tp == '+' || tp == '-') && (op == '('))
return '<';
return '>';
} int main()
{
stack<char>num;
stack<char>oper; oper.push('#'); string s;
cin >> s; for (int i = 0; i<s.length(); i++)
{
if (s[i] == '0' || s[i] == '1' || s[i] == '2' || s[i] == '3' || s[i] == '4' || s[i] == '5' || s[i] == '6' || s[i] == '7' || s[i] == '8' || s[i] == '9')
num.push(s[i]);
else
{
char comp = compare(oper.top(), s[i]);
if (comp == '<')
oper.push(s[i]);
else if (comp == '>')
{
if (s[i] == ')')
{
while (oper.top() != '(')
{
num.push(oper.top());
oper.pop();
}
oper.pop();
}
else
{
num.push(oper.top());
oper.pop();
oper.push(s[i]);
}
}
}
} while (oper.top() != '#')
{
num.push(oper.top());
oper.pop();
} deque<char> d; while (num.size() != 0)
{
d.push_front(num.top());
num.pop();
} for (auto i = d.begin(); i != d.end(); i++)
cout << *i; cout << endl; return 0;
}
最新文章
- 游戏编程技巧 - Type Object
- python直接执行另一个文件中的代码
- WordPress博客网站fonts.useso加载慢解决办法
- 用PHP语言刷OJ题
- leetcode 36
- 欧拉计划(1~3)ps:以后看题一定要认真
- hadoop 2.6.0 yarn total memory metrics 不正常
- 转: Apache开启gzip
- Struts2【OGNL、valueStack】就是这么简单
- CODEVS3269混合背包+二进制优化
- Java 8 新特性之 Lambda表达式
- C# 正则表达式应用
- jasperreports+IReport 5.56,集成到Spring MVC4.0案例
- javaweb复习(一)
- [转]解决Error: That port is already in use.
- tensorflow学习3---mnist
- kali安装搜狗输入法
- [算法]Bobmer
- 对cnblogs.com的用户体验
- svn无法checkout大文件的解决办法