博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构--算数表达式求值
阅读量:7163 次
发布时间:2019-06-29

本文共 2012 字,大约阅读时间需要 6 分钟。

#include "pch.h"#include 
#include
#include
using std::stack;using std::cin;using std::cout;using std::endl;using std::cerr;/* 0 1 2 3 4 5 6 + - * / ( ) # 0 + > > < < < > > 1 - > > < < < > > 2 * > > > > < > > 3 / > > > > < > > 4 ( < < < < < = 5 ) > > > > > > 6 # < < < < < =*//* > 2 < 1 = 0*/BYTE order[7][7] = { {2,2,1,1,1,2,2}, {2,2,1,1,1,2,2}, {2,2,2,2,1,2,2}, {2,2,2,2,1,2,2}, {1,1,1,1,1,0,255}, {2,2,2,2,255,2,2}, {1,1,1,1,1,255,0}};int Getloc(char achar) { switch (achar) { case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; case '#': return 6; } return -1; //会引发异常}int domath(int a, char opt, int b) { switch (opt) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b == 0) { throw "Division by zero condition!"; } return a / b; } return -1;}char transorder(char top, char c) { int x, y; y = Getloc(top); x = Getloc(c); return order[y][x];}int main(){ stack
OPTR; stack
OPND; char c; OPTR.push('#'); c = getchar(); BOOL ISNUMBER = FALSE; while (c != '#' || OPTR.top()!='#') { if (c >= '0' && c <= '9') { if (ISNUMBER) { int tmp = OPND.top(); OPND.pop(); OPND.push(tmp * 10 + c - '0'); c = getchar(); continue; } ISNUMBER = TRUE; OPND.push(c - '0'); c = getchar(); } else { ISNUMBER = FALSE; switch (transorder(OPTR.top(), c)) { case 1: OPTR.push(c); c = getchar(); break; case 0: OPTR.pop(); c = getchar(); break; case 2: int a, b; char opt = OPTR.top(); OPTR.pop(); b = OPND.top(); OPND.pop(); a = OPND.top(); OPND.pop(); try { OPND.push(domath(a,opt,b)); } catch (const char * e) { cerr << e << endl; return 0; } break; } } } cout << OPND.top(); return 0;}

 哎 写的时候把操作数的类型也写成char了 debug半天。。。

转载于:https://www.cnblogs.com/BD1A489/p/9798640.html

你可能感兴趣的文章