用C++实现中缀表达式求值即简单科学计算器的功能
2017-05-09 17:15
411 查看
用两个栈实现计算机加减乘除简易的计算器,一个栈乘数字,一个栈乘加减乘除号包括括号,通过出栈入栈来实现功能
#include <iostream> #include <string> using namespace std; template <class T> class myStack { private: T *elements; int top; int maxSize; public: myStack(int maxSize) { elements = new T[maxSize]; this->maxSize = maxSize; top = -1; } bool isFull() { if(top==maxSize-1) return true; else return false; } bool isEmpty() { if(top== -1) return true; else return false; } T pop() { if(isEmpty())return -1; else { top--; return elements[top+1]; } } bool push(T x) { if(isFull()) return false; else { top++; elements[top] = x; return true; } } int getSize() { return top+1; } T getTop() { return elements[top]; } }; int calculate(int a,int b,int c) { switch(c) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; default: return 0; } } char compare(char a1,char a2) { if(a1=='+'&&a2=='+')return '>'; else if(a1=='+'&&a2=='-') return '>'; else if(a1=='+'&&a2=='*') return '<'; else if(a1=='+'&&a2=='/')return '<'; else if(a1=='+'&&a2=='(')return '<'; else if(a1=='+'&&a2==')')return '>'; else if(a1=='+'&&a2=='#')return '>'; else if(a1=='-'&&a2=='+')return '>'; else if(a1=='-'&&a2=='-')return '>'; else if(a1=='-'&&a2=='*')return '<'; else if(a1=='-'&&a2=='/')return '<'; else if(a1=='-'&&a2=='(')return '<'; else if(a1=='-'&&a2==')')return '>'; else if(a1=='-'&&a2=='#')return '>'; else if(a1=='*'&&a2=='+')return '>'; else if(a1=='*'&&a2=='-')return '>'; else if(a1=='*'&&a2=='*')return '>'; else if(a1=='*'&&a2=='/')return '>'; else if(a1=='*'&&a2=='(')return '<'; else if(a1=='*'&&a2==')')return '>'; else if(a1=='*'&&a2=='#')return '>'; else if(a1=='/'&&a2=='+')return '>'; else if(a1=='/'&&a2=='-')return '>'; else if(a1=='/'&&a2=='*')return '>'; else if(a1=='/'&&a2=='/')return '>'; else if(a1=='/'&&a2=='(')return '<'; else if(a1=='/'&&a2==')')return '>'; else if(a1=='/'&&a2=='#')return '>'; else if(a1=='('&&a2=='+')return '<'; else if(a1=='('&&a2=='-')return '<'; else if(a1=='('&&a2=='*')return '<'; else if(a1=='('&&a2=='/')return '<'; else if(a1=='('&&a2=='(')return '<'; else if(a1=='('&&a2==')')return '='; else if(a1==')'&&a2=='+')return '>'; else if(a1==')'&&a2=='-')return '>'; else if(a1==')'&&a2=='*')return '>'; else if(a1==')'&&a2=='/')return '>'; else if(a1==')'&&a2==')')return '>'; else if(a1==')'&&a2=='#')return '>'; else if(a1=='#'&&a2=='+')return '<'; else if(a1=='#'&&a2=='-')return '<'; 4000 else if(a1=='#'&&a2=='*')return '<'; else if(a1=='#'&&a2=='/')return '<'; else if(a1=='#'&&a2=='(')return '<'; else if(a1=='#'&&a2=='#')return '='; else return ' '; } bool isChar(char c) { if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')return true; else return false; } int EvaluateExpression(string expression) { int result; myStack<int> *numStack = new myStack<int>(100); myStack<char> *charStack = new myStack<char>(100); charStack->push('#'); int i= 0; while(i<expression.length()) { int temp=0; bool flag = false; while(expression[i]>='0' &&expression[i]<='9') { temp = temp*10+expression[i]-'0'; i++; flag = true; } if(flag==true) { flag = false; numStack->push(temp); } if(isChar(expression[i])) { switch(compare(charStack->getTop(),expression[i])) { case '<': charStack->push(expression[i]); i++; break; case '=': charStack->pop(); i++; break; case '>': int a = numStack->pop(); int b = numStack->pop(); char c = charStack->pop(); result= calculate(b,a,c); numStack->push(result); break; } } } return numStack->pop(); } int main() { string a; for(;;) { cout<<"[0]退出程序\n[1]计算表达式"<<endl; int i; cin>>i; if(i==0)break; else { cout<<"请输入要表达的计算式"<<endl; cin>>a; a+='#'; cout<<EvaluateExpression(a)<<endl; } } return 0; }
相关文章推荐
- 一个能够实现简单功能的计算器
- C++链式栈的简单实现(只有基本功能)
- 一个简单的关于计算器功能的实现(剽窃)
- 简单实现JS计算器功能
- C++实现中缀表达式转后缀表达式并求值
- c++中map容器简单功能实现测试附带结构体指针测试
- C语言简单宏函数实现C++模板功能(类型本身作为函数参数)
- C++单项链表的构造及简单功能的实现
- JS小Demo实战之一个超级简单的计算器功能的实现。
- python实现最简单的计算器功能源码
- c++实现栈简单功能小程
- 一个简单的jQuery计算器实现了连续计算功能
- c++ 定时器 (简单功能实现)
- 简单实现C++复数计算器
- vs 05 c# 实现简单的计算器功能
- c++实现将简单的中缀表达式转化为…
- C++初学初练类与对象之矩阵简单功能实现
- C++实现中缀表达式求值代码
- c++实现简单的日志功能
- 用python的正则表达式实现简单的计算器功能