📄 expression.cpp
字号:
#include <iostream.h>
#include "stack.h"
#include "Expression.h"
;
//建立一个数组Exp和一个堆栈s
//先把输入的数学表达式存储到数组Exp中
//从数学表达式的第一个字符开始遍历表示式
//遇到非运算符的字符直接输出,遇到运算符与栈底运算符作相应比较
bool Compare(char a,char b) //比较遍历到的运算符号和目前栈底符号的优先级大小
{
if((a == 42||a == 47)&&(b == 43||b == '-'))
return false; //遍历到的运算符大于栈底符号的优先级时为“假”
else return true;
}
void main()
{
char Exp[ExpLength];
cout<<"请输入数学表达式:"<<endl;
cin.getline(Exp,ExpLength); //把输入的表达式存储到数组中
SeqStack S; //建立一个堆栈s
InitStack(&S);
cout<<"所输入的数学表达式的后缀表达式为:"<<endl;
int i = 0; //从数组的第一个元素开始遍历
while(Exp[i] != 0)
{
char item = Exp[i];
if(item !='+' && item !='-' && item !='*' && item !='/') //非运算符直接输出
cout<<item;
else
{
if(S.top == -1) //栈底无元素时直接存储
{
Push(&S,item);
}
else
if(Compare(item,S.data[S.top])) //当前运算符不大于栈底运算符的优先级时
{
do
{
cout<<Pop(&S); //取出栈底运算符
if(S.top == -1) break; //取出栈底运算符后如果栈空则跳出循环
}
while(Compare(item,S.data[S.top]));
Push(&S,item); //把当前运算符压入堆栈
}
else Push(&S,item);
}
i++;
}
while(S.top != -1) //依次取出栈中剩余运算符
{
cout<<Pop(&S);
};
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -