Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- class Node{
- public:
- Node* left;
- Node* right;
- virtual void PrintInOrder(){}
- void getInfo();
- virtual double evaluate(){return 0;}
- };
- class operation : public Node{
- public:
- char info;
- void PrintInOrder(){
- if(!this)return;
- if(left)left->PrintInOrder();
- cout<<info;
- if(right)right->PrintInOrder();
- }
- double evaluate(){
- if(info=='+'){
- return left->evaluate()+right->evaluate();
- }
- if(info=='*'){
- return left->evaluate()*right->evaluate();
- }
- if(info=='/'){
- return left->evaluate()/right->evaluate();
- }
- if(info=='-'){
- return left->evaluate()-right->evaluate();
- }
- }
- // void getInfo(){return info;}
- };
- class number : public Node{
- public:
- double info;
- void PrintInOrder(){
- if(!this)return;
- if(left)left->PrintInOrder();
- cout<<info;
- if(right)right->PrintInOrder();
- }
- double evaluate(){
- return info;
- }
- //
- // void getInfo(){return info;}
- };
- void seekCertainOperator(char Op,vector<Node*>&Input){
- for(int i=0;i<Input.size();i++){
- if(((operation*)Input[i])->info==Op){
- Input[i]->left=Input[i-1];
- Input[i]->right=Input[i+1];
- Input.erase(Input.begin()+i-1);
- Input.erase(Input.begin()+i);
- }
- }
- }
- void allOperator(vector<Node*>&Input){
- seekCertainOperator('*',Input);
- seekCertainOperator('/',Input);
- seekCertainOperator('+',Input);
- seekCertainOperator('-',Input);
- }
- vector<Node*> Transform(string In){
- vector <Node*> Temp;
- for(int i=0;i<In.size();i++){
- if(In[i]>='0'&&In[i]<='9'){
- Node *Temp1= new number();
- ((number*)Temp1)->info=In[i]-'0';
- Temp1->left=NULL;
- Temp1->right=NULL;
- Temp.push_back(Temp1);
- }else{
- Node*Temp1=new operation;
- ((operation*)Temp1)->info=In[i];
- Temp1->left=NULL;
- Temp1->right=NULL;
- Temp.push_back(Temp1);
- }
- }
- return Temp;
- }
- int main()
- {
- vector<Node*> Equation;
- string Input="6+5*9/8-6/4*7+2";
- Equation=Transform(Input);
- allOperator(Equation);
- Equation[0]->PrintInOrder();
- cout<<" = "<<Equation[0]->evaluate();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement