📄 中转后.cpp
字号:
#include "iostream.h"
char s1[100],s2[100];
//s1存放中缀表达式,s2存放后缀表达式
class seqstack{
public:
char stack[100];
int top;
void inistack(seqstack &s);
void push(seqstack &s,char x);
void pop(seqstack &s);
char gettop(seqstack s);
bool empty(seqstack s);
int oper(char op);
void change(seqstack &s);
};
void seqstack::inistack(seqstack &s)
{s.top=0;
}
void seqstack::push(seqstack &s,char x)
{ if(s.top==99)
cout<<"error"<<endl;
else
{ s.top++;
s.stack[s.top]=x;
}
}
void seqstack::pop(seqstack &s)
{ if(s.top==0)
cout<<"error"<<endl;
else
s.top--;
}
char seqstack::gettop(seqstack s)
{ if(s.top==0)
{ cout<<"error"<<endl;
return 0;
}
else
return s.stack[s.top];
}
bool seqstack::empty(seqstack s)
{ if(s.top==0) return true;
else return false;
}
int seqstack::oper(char op)
{ switch(op){
case '+':case '-' : return 1;
case '*':case '/' : return 2;
case '(':return 0;
default: return 0;
}
}
void seqstack::change(seqstack &s)
{ char y,ch;
s.top=0;
s.inistack(s);
s.push(s,'@');
int i=0,j=0;
ch=s1[i];
while(ch!='@')
{ if(ch==' ') ch=s1[++i];
else if(ch=='(') //为(时进栈
{ s.push(s,ch);
ch=s1[++i];
}
else if(ch==')') //为)时退栈,直到(为止
{ y=s.gettop(s);
while(y!='(')
{ s2[j++]=y;
s2[j++]=' ';
s.pop(s);
y=s.gettop(s);
}
s.pop(s); //将(弹出栈
ch=s1[++i];
}
else if((ch=='+') ||(ch=='-') || (ch=='*') || (ch=='/'))
{ y=s.gettop(s); //对运算符进行优先级比较
if(s.oper(ch)>s.oper(y)) //优先级大的入栈
{ s.push(s,ch);
ch=s1[++i];
}
else
{ y=s.gettop(s); //否则退出栈顶元素,并记入s2中
s2[j++]=y;
s2[j++]=' ';
s.pop(s);
}
}
else //若为数字字符时,直接记入s2中
{ while(((ch>='0') && (ch<='9')) || (ch=='.'))
{ s2[j++]=ch;
ch=s1[++i];
}
s2[j++]=' ';
}
}
y=s.gettop(s);
while(y!='@')
{ s2[j++]=y;
s2[j++]=' ';
s.pop(s);
y=s.gettop(s);
}
s2[j]='@';
}
void main()
{ seqstack s;
char ch;
int i=0;
cout<<"请输入中缀表达式(以'@'结束)";
cin>>ch;
while(ch!='@')
{ s1[i++]=ch;
cin>>ch;
}
s1[i]='@';
cout<<"中缀表达式为:"<<endl;
for(int j=0;j<i;j++)
cout<<s1[j];
cout<<endl;
s.change(s);
cout<<"后缀表达式为:"<<endl;
j=0;
while(s2[j]!='@')
{ cout<<s2[j];
j++;
}
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -