首页 > 代码库 > 表达式求值
表达式求值
// exam1.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stack> using namespace std; int priority(char op) { switch(op) { case '(': return 1; case '+': case '-': return 2; case '*': case '/': return 3; case ')': return 4; case '#': return 5; } } bool cmp_lg(char op1,char op2) { int proi1=priority(op1); int proi2=priority(op2); if(proi1>=proi2) { return true; } else { return false; } } int cal_func(char op,int num1,int num2) { switch(op) { case '+': return num1+num2; case '-': return num1-num2; case '*': return num1*num2; case '/': return num1/num2; default: return num1+num2; } } void cal(void) { cout<<"Please enter the formula whose end is '#'..."<<endl; char ch; stack<int> num; stack<char> op; while(1) { cin>>ch; if(ch=='#') { break; } if(ch>='0' && ch<='9') { num.push(ch-'0'); } else { if(op.empty()) { op.push(ch); } else { char op1,op2; op1=op.top(); op2=ch; if(ch=='(') { op.push(ch); } else if(cmp_lg(op1,op2)) { int result,num1,num2; num1=num.top(); num.pop(); num2=num.top(); num.pop(); result=cal_func(op1,num1,num2); num.push(result); op.pop(); op.push(op2); } else { if(ch==')') { int result; int num1,num2; char op0; num1=num.top(); num.pop(); num2=num.top(); num.pop(); op0=op.top(); op.pop(); op.pop(); result=cal_func(op0,num1,num2); num.push(result); } else { op.push(ch); } } } } } while(!num.empty() && !op.empty()) { int result; int num1,num2; char op0; num1=num.top(); num.pop(); num2=num.top(); num.pop(); op0=op.top(); op.pop(); result=cal_func(op0,num1,num2); num.push(result); } cout<<"The result is "<<num.top()<<"."<<endl; } int main(void) { cal(); system("pause"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。