// 274+(16-8*2/4)*14-525/(5-4*2)
// 274 16 8 2 * 4 / - 14 * + 525 5 4 2 * - / -
// 617
测试示意图2022/04/04 鸿蒙·乾坤Day215
关于思想的说明:中缀转后缀
符号优先级:(栈空·绝对)> (左括号·特殊) >(乘除)>(加减)> (右括号·特殊)
工作框架:
A.遇见数字,直接输出
B.遇见符号:判断优先级
a.无括号:判断优先级
弹出所有优先级【大于等于】当前符号的符号
(等级高的、平级的;全部打掉)
后,再将当前符号写入
如:+可以弹出栈内+-*/四个符号,*可以弹出*/
b.有括号
左括号:直接进去
右括号:收割!到左括号前所有符号依次弹出
bugの修复:
A.对于空栈,不可以访问top,否则导致崩溃
这导致代码增加了很多判空的操作,显得非常冗杂
因为太消耗精力了,(几乎弄了一天),也懒得修
B.后缀读取栈顶俩元素,第一个出来的是y,后出来的才是x,x+y再操作
#include <iostream>
#include <stdio.h>
#include <stack>
#include <queue>
#include <string.h>
using namespace std;
//《辅助功能》
int get(char a) //字符转数字
{
if (a == '0')
return 0;
if (a == '1')
return 1;
if (a == '2')
return 2;
if (a == '3')
return 3;
if (a == '4')
return 4;
if (a == '5')
return 5;
if (a == '6')
return 6;
if (a