模拟计算器

/*
模拟计算器程序
问题描述
设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、=、以及C(清除)、A(全清除)操作。
基本要求
程序运行时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在窗口中,用户键入’=’ 符号后,窗口显示出结果。
测试数据
程序输入不少于5种不同的表达式进行测试。
实现提示
可定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。
选作内容
如果用户输入的表达式不合法,可以判别出来并给出相应的错误提示。
*/

#include
#include
#include
using namespace std;
const int maxn=100;
int number[maxn];
char symbolt[maxn];
string s,t;
int i,j,p;

void push()
{
p++;
symbolt[p]=s[i];
}

void pop()
{
p--;
switch (symbolt[p+1])
{
case '+':{number[p]+=number[p+1];break;}
case '-':{number[p]=number[p]-number[p+1];break;}
case '*':{number[p]=number[p]*number[p+1];break;}
case '/':{number[p]=number[p]/number[p+1];break;}
}
}

bool can()
{
if (((s[i]=='+')||(s[i]=='-'))&&(symbolt[p]!='(')) return true;
if (((s[i]=='*')||(s[i]=='/'))&&((symbolt[p]=='*')||(symbolt[p]=='/'))) return true;
return false;
}

int stringToNumber(string aStr)
{
int number = 0;
for (int i=0;i{
number = number*10 + aStr[i]-48;
}
return number;
}

int main()
{
cout<<"Input your string:";
cin>>s;
s='('+s+')';
i=0;
p=0;
while (i<=s.length()-1)
{
while (s[i]=='(')
{
push();
i++;
}
j=i;
do
{
i++;
}
while ((s[i]>='0')&&(s[i]<='9'));
int m;
t="";
int h=0;
for(m=j;mnumber[p] = stringToNumber(t);;
do
{
if (s[i]==')')
{
while (symbolt[p]!='(') pop();
p--;
number[p]=number[p+1];
}
else
{
while (can()) pop();
push();
}
i++;
}
while ((i<=s.length())&&(s[i-1]==')'));
}
cout<<"Result="<system("pause");
return 0;
}

相关主题
相关文档
最新文档