用C++实现中缀表达式求值即简单科学计算器的功能
来源:互联网 发布:mac视频字幕制作软件 编辑:程序博客网 时间:2024/06/06 10:57
用两个栈实现计算机加减乘除简易的计算器,一个栈乘数字,一个栈乘加减乘除号包括括号,通过出栈入栈来实现功能
#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 '<'; 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;}
1 0
- 用C++实现中缀表达式求值即简单科学计算器的功能
- [计蒜客 15504 百度的科学计算器(简单)]表达式求值
- 百度的科学计算器(简单) Python 库函数实现表达式求值
- 简单计算器求值(中缀表达式转化成后缀表达式)
- HDU 1237 简单计算器(中缀表达式求值)
- 中缀转后缀并求值(简单计算器的核心)
- 一个用C实现的科学计算器
- 包含简单科学运算的表达式求值
- 具有表达式求值功能的计算器软件设计
- C语言 实现中缀表达式转后缀表达式并求值
- 中缀表达式求值(C++)
- 实现简单的表达式求值
- hdu 1237 简单计算器【最简单的表达式求值】
- C/C++的中缀转后缀并求值的实现
- 计算器实现---中缀表达式转后缀表达式
- C++实现中缀表达式求值代码
- 计算器C++代码实现—— 中缀表达式的计算
- HDU 1237(简单计算器)栈的应用-表达式求值
- git 初次提交
- 关于麒麟座开发板串口打印乱码与其它工程用官方源码出问题的解决方案
- Farey Sequence(数论,欧拉函数(水))
- 【jzoj5098】【GDOI2017 day1】【微信】【tire上建sam】
- stm32外部中断实验
- 用C++实现中缀表达式求值即简单科学计算器的功能
- springmvc+mybatis+mysql 根据生日计算年龄
- 工厂模式
- java Swing中的布局模式
- Python 3基础教程42-锁
- unity2D的物理碰撞和非物理碰撞的认识
- iOS中NSString转float失真问题的解决办法
- Apalis TK1 运行 Android 7.1
- 关于Linux-网络通信工具