📄 expression.cpp
字号:
#include <string>
#include <iostream>
using namespace std;
class expression
{
public:
expression();
int evaluation();
void showvalue();
~expression();
private:
char *appearance;
double value;
};
expression::expression()
{
char apear[80];
cout<<"请输入表达式: ";
cin>>apear;
appearance=new char[strlen(apear)+1];
strcpy(appearance,apear);
value=0.0;
}
expression::~expression()
{
delete[] appearance;
}
int expression::evaluation()
{
int digbom,dighd,symbom,symhd; //定义两个栈,digit存放字符,symbol存放运算符
char c,*symbol;
double *digit;
symbol=new char[strlen(appearance)+1];
digit=new double[strlen(appearance)+1];
digbom=dighd=0; //初始化两个栈的游标
symbom=0;
symhd=-1;
digit[0]=0.0;
int i,j,error=0;
int flag=0;
double decimal=0.0; //输入
for(i=0;c=appearance[i],c!='\0'&&error==0;i++) //当输入为'e'时结束
{
switch(c)
{
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
case '0' :
if(flag==0)
digit[dighd]=digit[dighd]*10+c-48;
else
{
flag++;
decimal=c-48;
for(j=1;j<flag;j++)
decimal/=10;
digit[dighd]+=decimal;
}
break;
case '.' :
flag=1;
break;
case ')' :
flag=0; //输入右括号则让符号栈中的左括号后面的
while(symbol[symhd]!='(') //符号依次进字符栈中
{
if(symbol[symhd]=='+')
digit[dighd-1]+=digit[dighd];
else if(symbol[symhd]=='-')
digit[dighd-1]-=digit[dighd];
else if(symbol[symhd]=='*')
digit[dighd-1]*=digit[dighd];
else if(symbol[symhd]=='/')
digit[dighd-1]/=digit[dighd];
dighd--;
symhd--;
}
symhd--;
break;
case '-' : //输入为加减时则让符号栈顶部优先级高的
case '+' :
flag=0; //乘除符号依次进字符栈
while(symbol[symhd]=='*'||symbol[symhd]=='/')
{
if(symbol[symhd]=='*')
digit[dighd-1]*=digit[dighd];
if(symbol[symhd]=='/')
digit[dighd-1]/=digit[dighd];
dighd--;
symhd--;
}
symhd++;
symbol[symhd]=c; //加减号进符号栈
dighd++;
digit[dighd]=0.0;
break;
case '(' :
symhd++;
symbol[symhd]=c; //输入为乘除或左括号时进符号栈
break;
case '*' :
case '/' :
flag=0;
symhd++;
symbol[symhd]=c; //输入为乘除或左括号时进符号栈
dighd++;
digit[dighd]=0.0;
break;
default :
error=1;
return error;
break;
}
}
while(symhd>=symbom)
{
if(symbol[symhd]=='+')
digit[dighd-1]+=digit[dighd];
else if(symbol[symhd]=='-')
digit[dighd-1]-=digit[dighd];
else if(symbol[symhd]=='*')
digit[dighd-1]*=digit[dighd];
else if(symbol[symhd]=='/')
digit[dighd-1]/=digit[dighd];
dighd--;
symhd--;
}
value=digit[dighd];
delete[] digit;
delete[] symbol;
return error;
}
inline void expression::showvalue()
{
cout<<"表达式的值是: "<<value<<endl;
}
void main()
{
cout<<"——————算术表达式求值——————"<<endl<<endl;
cout<<" 程序员:蝈蝈"<<endl<<endl;
cout<<"本程序应ARM之须而作"<<endl<<endl;
expression E;
if(!E.evaluation())
E.showvalue();
else
cout<<"你的输入有错误,谢谢使用"<<endl;
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -