数据结构课程设计简易运算器
#include
#include
#include
#include
#include
#include
using namespace std;
char str[50]; //用于存放原来的表达式
int top; //栈顶指针
char stack[50]; //定义栈,用于计算逆波兰式
char ex[50]; //存放后缀表达式
double _stack[50]; //定义栈,用于计算逆波兰式子
int flag[50]; //用于区分+、-号的含义,0表示运算符,1表示正负号
//生成逆波兰式
void NiBolan()
{
memset(flag,0,sizeof(flag)); //flag初始值设为0
char ch=str[0];
int i=1,t=0;
top=0;
while(ch!='#')
{
switch(ch)
{
case '(':
top++;
stack[top]=ch;
break;
case ')':
while(stack[top]!='(')
{
ex[t]=stack[top];
top--;
t++;
}
top--;
break;
case '^':
while(stack[top]=='^') //设置^运算符优先级为最高
{
ex[t]=stack[top];
top--;
t++;
}
top++;
stack[top]=ch;
break;
case '+':
case '-':
//当ch为+、-号是,若前面相邻字符不是')'或数字且后面相邻字符是数字时表示正负号
if(isdigit(str[i]) && !isdigit(str[i-2]) && str[i-2]!=')')
{
flag[t]=1; //标记符号为正负号
ex[t++]=ch;
ch=str[i++];
while((ch>='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;='0'&&ch;<='9')
{
d=d+double(ch-'0')/(10.0*k);
k=k+1.0;
ch=ex[++t];
}
}
top++;
_stack[top]=d;
}
ch=ex[t];
}
cout<<"计算出的结果:"<<_stack[top]<逆波兰式
Calculate(); //计算逆波兰式
return 0;
}
2021-12-19 23:26:20
8KB
数据结构
1