输入一个四则运算表达式(不含括号),按序输出其中的运算符和运算分量。
给出下面的基类框架
class Token
{
protected:
int NO;//编号
public:
virtual void display()=0;//打印记号
}
以Token为基类,构建Operator和Number类。
生成上述类并编写主函数,要求主函数中有一个基类Token指针数组,数组元素不超过9个。
Token *pt[9];
主函数根据输入的信息,相应建立Operator, Number类对象,对于Operator存储运算符,对于Number存储运算分量的值。
输入格式:每个测试用例占一行,相邻的运算分量(为整数)和运算符(为+、-、*、/)用一个空格分开,最后一行为A,表示输入的结束。
输出时,依次打印各个测试用例中的记号,依次输出该记号的序号,类型(NUMBER或OPERATOR)和值(对于运算分量,直接输出它的值,对于运算符,则转成英文简写,+简写为ADD,-简写为SUB, *简写为MUL, /简写为DIV)。
输入样例:
23 * 5 + 7 –2
9 + 6 / 3
A
输出样例:
1 NUMBER 23
2 OPERATOR MUL
3 NUMBER 5
4 OPERATOR ADD
5 NUMBER 7
6 OPERATOR SUB
7 NUMBER 2
1 NUMBER 9
2 OPERATOR ADD
3 NUMBER 6
4 OPERATOR DIV
5 NUMBER 3
来源
多态
#include<iostream>
#include<string.h>
using namespace std;
class Token
{
protected:
int NO;
public:
Token(int n):NO(n){
}
virtual void display()=0;
virtual~Token(){delete this;
}
};
class Operator:public Token
{
string p;
public:
Operator(int n,string p):Token(n),p(p){
}
virtual void display(){
cout<<NO<<" OPERATOR ";
if(p=="*")cout<<"MUL"<<endl;
if(p=="/")cout<<"DIV"<<endl;
if(p=="+")cout<<"ADD"<<endl;
if(p=="-")cout<<"SUB"<<endl;
}
~Operator(){delete this;
}
};
class Number:public Token
{
string num;
public:
Number(int n,string num):Token(n),num(num){
}
virtual void display(){
cout<<NO<<" NUMBER "<<num<<endl;
}
~Number(){delete this;
}
};
int main()
{
Token*pt[9];
string temp;
char end;
int i,j,k;
cin>>temp;
i=0;
while(temp!="A")
{
if(i%2==0)
pt[i]=new Number(i+1,temp);
else
pt[i]=new Operator(i+1,temp);
i++;
end=getchar();
if(end=='n')
j=i,i=0;
if(i==0)
{
for(i=0;i<j;i++)
pt[i]->display();
i=0;
}
cin>>temp;
}
}