資源簡介
利用棧實現(xiàn)科學(xué)計算器的連續(xù)輸入求值,自動選擇運算優(yōu)先級,提示括號的不匹配以及各種輸入錯誤。
代碼片段和文件信息
#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(“缺少右操作數(shù)“);
return?false;
}
right=s.top();s.pop();
if(s.empty()==true)
{
AfxMessageBox(“缺少左操作數(shù)“);
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()
{
- 上一篇:用C語言解線性方程組
- 下一篇:C語言迷宮小游戲課程設(shè)計
評論
共有 條評論