码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--算数表达式求值

时间:2018-10-16 17:35:58      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:数据结构   number   cat   ios   算数   end   byte   tran   cpp   

#include "pch.h"
#include <windows.h>
#include <iostream>
#include <stack>
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<char> OPTR;
	stack<int> 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半天。。。

数据结构--算数表达式求值

标签:数据结构   number   cat   ios   算数   end   byte   tran   cpp   

原文地址:https://www.cnblogs.com/BD1A489/p/9798640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!