📄 redown.cpp
字号:
#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<stack>
using namespace std;
class recurdown
{
public:
recurdown()
{ input();
init();
}
void input();
void init();
void E()
{
T();E1();
}
void E1()
{
AND();T();E1();
}
void T()
{
F();T1();
}
void T1()
{
MUL();F();T1();
}
void F();
void AND();
void MUL();
void get_s();
void error();
int priority(char c);
void output()
{ cout<<r[1];}
private:
string s,r;
stack<char> z;
char sym;
int n;
};
void recurdown::input()
{
cout<<"input:"<<endl;
char s[10];
cin>>s;
}
void recurdown::init()
{
while(!z.empty())
z.pop();
z.push('#');
n=0;sym='#';s=r='\0';
}
void recurdown::AND()
{
if(sym=='+')
{ get_s();}
else
if(sym=='-')
{ get_s();}
else
error();
}
void recurdown::MUL()
{
if(sym=='*')
{get_s();}
else if(sym=='/')
get_s();
else
error();
}
void recurdown::F()
{
if(sym=='(')
{
get_s(); E();
if(sym==')')
get_s();
else error();
}
else
if(sym=='i')
{r+=sym; get_s();}
else error();
}
void recurdown::error()
{
cout<<"Failed Recognization"<<endl;
exit(1);
}
int recurdown::priority(char c)
{
switch(c)
{
case '#':return 0;
case '+':
case '-':return 1;
case '*':
case '/': return 2;
case '(':
case ')':return 3;
}
}
void recurdown::get_s()
{
if(n<s.length())
{
sym=s[n];
if(sym!='i')
if(priority(z.top())<priority(sym))
{ z.push(sym);cout<<sym;}
else
{r+=z.top();z.pop();}
n++;
}
}
void main()
{
l:
recurdown y;
y.get_s();
y.E();
y.output();
char c;
cout<<"continue [Y/N]? "<<endl;
cin>>c;
if(c=='y') goto l;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -