• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: 计算器  

资源简介

利用栈实现科学计算器的连续输入求值,自动选择运算优先级,提示括号的不匹配以及各种输入错误。

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “Calculator.h“
#include 
#include 

bool Calculator::DoOperator(char op)
{
double liftrightvalue;bool result;
result=Get2Operands(liftright);
if(result==true)
{
switch(op)
{
case‘+‘:value=lift+right;s.push(value);break;
case‘~‘:value=lift-right;s.push(value);break;
case‘*‘:value=lift*right;s.push(value);break;
case‘/‘:if(right==0.0)
{
AfxMessageBox(“Divide by 0!“);
Clear();
}
else{value=lift/right;s.push(value);}
break;
}
return true;
}
else
{
Clear();
return false;
}
}

bool Calculator::Get2Operands(double& liftdouble& right)
{
if(s.empty()==true)

AfxMessageBox(“缺少右操作数“);
return false;
}
right=s.top();s.pop();
if(s.empty()==true)
{
AfxMessageBox(“缺少左操作数“);
return false;
}
lift=s.top();s.pop();
return true;
}

bool Calculator::Run(CString& str2)
{
std::stringstream is(str2.GetBuffer());
char ch;double a;is>>ch;
while(ch!=‘#‘)
{
if(isdigit(ch))
{
is.putback(ch);
is>>a;s.push(a);
}
else if(ch==‘-‘)
{
is.putback(ch);
is>>a;s.push(a);
}
switch(ch)
{
case‘+‘:case‘~‘:case‘*‘:case‘/‘:
if(DoOperator(ch)==true)
break;
else
return false;
}
is>>ch;
}
str2.Format(“%f“a=s.top());
return true;
}

void Calculator::Clear()
{

评论

共有 条评论