运算符为+,-,*,/;操作数为整数;且没有括号

设定符号优先级,先在栈底压运算符0

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std; stack<int> op;
stack<double> num; char input[]; bool prio[][]=
{
,,,,, //
,,,,, //+
,,,,, //-
,,,,, //*
,,,,, //,/
}; void getNext(bool &isOp,int &opNum,int &loc)
{
if(''<=input[loc]&&input[loc]<='')
{
int tmp=;
while(input[loc]!=' '&&input[loc]!=)
{
tmp*=;
tmp+=input[loc]-'';
loc++;
}
isOp=;
opNum=tmp;
if(input[loc]!=)
loc++;
}
else
{
isOp=;
if(input[loc]==)
opNum=;
else if(input[loc]=='+')
opNum=;
else if(input[loc]=='-')
opNum=;
else if(input[loc]=='*')
opNum=;
else
opNum=;
loc+=;
}
} int main()
{
while(gets(input))
{
while(!op.empty())
op.pop();
while(!num.empty())
num.pop();
if(strlen(input)==&&input[]=='')
break;
bool isOp=;
int opNum=,loc=;
op.push();
while(loc<=strlen(input))
{
getNext(isOp,opNum,loc);
if(isOp==)
num.push(opNum);
else
{
int opTop=op.top();
if(prio[opNum][opTop]==)
op.push(opNum);
else
{
while(prio[opNum][opTop]==) //这个地方之前出错,当当前运算符优先级比栈顶元素低,应该一直计算至栈顶元素优先级低于当前元素优先级
{
double num2=num.top();
num.pop();
double num1=num.top();
num.pop();
int nowOp=op.top();
op.pop();
opTop=op.top();
if(nowOp==)
num.push(num1+num2);
else if(nowOp==)
num.push(num1-num2);
else if(nowOp==)
num.push(num1*num2);
else if(nowOp==)
num.push(num1/num2);
}
op.push(opNum);
}
}
}
printf("%.2f\n",num.top());
}
return ;
}

最新文章

  1. C++设计模式-Builder建造者模式
  2. c++将引用作为函数的参数---6
  3. 简单的cocos2d-x手势(转)
  4. &lt;转载&gt;构造函数与拷贝构造函数
  5. C语言的一些常见细节
  6. 你需要Mobx还是Redux?
  7. python--对象实例化过程
  8. shell编程—简介(一)
  9. PAT基础6-7
  10. DLNg改善深层NN:第一周DL的实用层面
  11. SQL Server中调用WebService
  12. AfxBeginThread
  13. vscode关闭后未打开上次界面的解决办法
  14. Java初学者必学的JSTL
  15. abp + angular $http + webapi 服务
  16. Docker部署MySQL容器
  17. 使用Hexo写博客
  18. 【Python】setup-转载
  19. poj万人题
  20. 网络监控之一:ss(Socket Statistics)

热门文章

  1. windows下的java+maven项目环境搭建
  2. uboot中关于LCD的代码分析【转】
  3. YTU 2983: 小明的生机!
  4. maven目录结构介绍篇
  5. 【SCOI 2005】 最大子矩阵
  6. mysql 里面的isnull()和ifnull() is null 和 is not null
  7. crm-vue项目上线前对加载速度以及兼容IE的一些方法
  8. 执行linux脚本出现问题
  9. [2010国家集训队]Crash的旅游计划
  10. [Usaco2017 Feb]Why Did the Cow Cross the Road III (Gold)