admin管理员组文章数量:1130349
Interpret
#include <iostream>
#include <map>
#include <stack>using namespace std;class Expression{
public:virtual int interpret(map<char, int>var) = 0;virtual ~Expression(){}
};//变量表达式
class VarExpression : public Expression{char key;
public:VarExpression(const char & key){ this->key = key; }int interpret(map<char, int> var)override{return var[key];}};//符号表达式
class SymbolExpression : public Expression{//运算符左右有两个参数
protected:Expression * left;Expression * right
;public:SymbolExpression(Expression * left, Expression * right):left(left), right(right){}
};//加法运算
class AddExpression : public SymbolExpression{public:AddExpression(Expression * left, Expression * right):SymbolExpression(left, right){}int interpret(map<char, int> var) override{return left->interpret(var) + right->interpret(var);}
};//减法运算
class SubExpression : public SymbolExpression{public:SubExpression(Expression * left, Expression * right):SymbolExpression(left, right){}int interpret(map<char, int> var) override{return left->interpret(var) - right->interpret(var);}
};Expression * analyse(string expStr){stack<Expression * > expStack;Expression * left = nullptr;Expression * right = nullptr;for(int i = 0; i < expStr.size(); i++){switch(expStr[i]){case '+':left = expStack.top();right = new VarExpression(expStr[++i]);expStack.push(new AddExpression(left, right));break;case '-':left = expStack.top();right = new VarExpression(expStr[++i]);expStack.push(new SubExpression(left, right));break;default:expStack.push(new VarExpression(expStr[i]));}}Expression * expression = expStack.top();return expression;
}int main()
{cout << "Hello World!" << endl;string expStr = "a+b-c+d";map<char, int>var;var['a'] = 5;var['b'] = 2;var['c'] = 1;var['d'] = 6;Expression * expression = analyse(expStr);int result = expression->interpret(var);cout<<result<<endl;return 0;
}
Interpret
#include <iostream>
#include <map>
#include <stack>using namespace std;class Expression{
public:virtual int interpret(map<char, int>var) = 0;virtual ~Expression(){}
};//变量表达式
class VarExpression : public Expression{char key;
public:VarExpression(const char & key){ this->key = key; }int interpret(map<char, int> var)override{return var[key];}};//符号表达式
class SymbolExpression : public Expression{//运算符左右有两个参数
protected:Expression * left;Expression * right
;public:SymbolExpression(Expression * left, Expression * right):left(left), right(right){}
};//加法运算
class AddExpression : public SymbolExpression{public:AddExpression(Expression * left, Expression * right):SymbolExpression(left, right){}int interpret(map<char, int> var) override{return left->interpret(var) + right->interpret(var);}
};//减法运算
class SubExpression : public SymbolExpression{public:SubExpression(Expression * left, Expression * right):SymbolExpression(left, right){}int interpret(map<char, int> var) override{return left->interpret(var) - right->interpret(var);}
};Expression * analyse(string expStr){stack<Expression * > expStack;Expression * left = nullptr;Expression * right = nullptr;for(int i = 0; i < expStr.size(); i++){switch(expStr[i]){case '+':left = expStack.top();right = new VarExpression(expStr[++i]);expStack.push(new AddExpression(left, right));break;case '-':left = expStack.top();right = new VarExpression(expStr[++i]);expStack.push(new SubExpression(left, right));break;default:expStack.push(new VarExpression(expStr[i]));}}Expression * expression = expStack.top();return expression;
}int main()
{cout << "Hello World!" << endl;string expStr = "a+b-c+d";map<char, int>var;var['a'] = 5;var['b'] = 2;var['c'] = 1;var['d'] = 6;Expression * expression = analyse(expStr);int result = expression->interpret(var);cout<<result<<endl;return 0;
}
本文标签: Interpret
版权声明:本文标题:Interpret 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/IT/1687773439a139686.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论