栈实现简单的四则运算表达式
2015-01-19 17:00
716 查看
支持 + - * / ^ ()
#include<iostream> #include<cstring> #include<string> #include<stack> #include<cmath> #include<cstdio> using namespace std; stack<int> opnd; //操作数栈 stack<char> optr; //算术符栈 string expression; //存放表达式 //返回两算术符a和b的优先关系 char Compare(char a,char b) { if('#' == a) { if('#'== b) return '='; else return '<'; } if('+'== a || '-'== a) { if('*'== b || '/'== b || '^'== b || '('== b) return '<'; else return '>'; } if('*'== a || '/'== a) { if('('== b || '^'== b) return '<'; else return '>'; } if('^'== a) { // 2^3^2 相当于2^(3^2) if('^' == b || '(' == b ) return '<'; else return '>'; } if('('== a) { if(')'== b) return '='; else return '<'; } } //返回计算结果 int Calculate(int a,int b,char op) { switch (op) { case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; case '^': return pow(a,b); } } //是否是运算符 bool Isoptr(char c) { static string oprator("+-*/^()#"); //没找到返回 npos if(oprator.find(c) == string::npos) { return false; } return true; } //求值过程 int EvaluateExpression() { int i=0,num=0; while ( expression[i]!='#' || optr.top()!='#' ) { if( !Isoptr(expression[i]) ) { //不是算术符,则是操作数 num=0; while( !Isoptr(expression[i]) ) { //求得此操作数 num *= 10; num += expression[i]-'0'; ++i; } opnd.push(num); } else { //运算符栈顶元素 与 表达式当前的 运算符相比较 switch (Compare(optr.top(),expression[i] )) { case '<': optr.push(expression[i]); ++i; break; //小括号丢掉 case '=': optr.pop(); ++i; break; case '>': int a = opnd.top(); opnd.pop(); int b = opnd.top(); opnd.pop(); printf("%d%c%d=%d\n",b,optr.top(),a,Calculate(b,a,optr.top())); opnd.push(Calculate(b,a,optr.top())); //注意 a 和 b 的顺序 optr.pop(); break; } } } optr.push('#');//表达式最左边录入一个 ’#‘,形成一对 '#' int res=opnd.top(); opnd.pop(); return res; } int main() { /*在表达式最左边增加一个'#,'形成一对 '#' 同时当表达式输入完后在录入一个’#‘表示结束 */ optr.push('#'); int count=0; while ( cin>>expression ) { int sum=expression.size(); expression[sum]='#'; ++count; cout<<"Case "<<count<<":"<<EvaluateExpression()<<endl; } return 0; }
相关文章推荐
- [置顶] 编译原理---四则运算表达式的计算简单实现
- linux shell 实现 四则运算(整数及浮点) 简单方法
- 用PHP实现的四则运算表达式计算实现代码
- Java实现四则运算表达式计算
- qt用设计器实现简单四则运算计算器
- linux shell 实现 四则运算(整数及浮点) 简单方法
- linux shell 实现 四则运算(整数及浮点) 简单方法
- NYOJ 35题 表达式求值,四则运算(栈实现) 严蔚敏
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)
- C++ 四则运算表达式(简单的+-*/带括号) 栈
- linux shell 实现 四则运算(整数及浮点) 简单方法
- 一个简单的四则运算程序C语言实现--实现处理括号
- 计算带括号的四则运算表达式,这个实现方式你想过吗?
- 栈的应用,实现简单的不带括号的四则运算
- 实数四则运算表达式的计算,C++ 实现
- 用PHP实现的四则运算表达式计算
- inux shell 实现 四则运算(整数及浮点) 简单方法
- 用PHP实现的四则运算表达式计算
- shell实现四则运算简单方法
- 如何处理加括号的四则混合运算表达式——基于二叉树的实现(Eclipse平台 Java版)