我正在使用抽象数据类型来评估表达式树,因为它先前以不同的方式反对,我不确定如何准确地使用map函数。
好的,这个功能
int arithmetic_expression::evaluate_Expression(std::map< std::string, int > ipMap)
{
if (tree != NULL){
return(tree->evaluate(ipMap));
}
else
return(0);
}
调用此函数,在此函数中我不知道返回什么
int Tree::evaluate(std::map< std::string, int > ipMap){
//not sure what to put in return to evaluate the expression
if(NodeType==TYPE_OPERATOR)
{
return())
}
我之前以不同的方式做过这个
int arithmetic_expression::evaluate_Expression()
{
if (topPtr != NULL)
return(evaluateTree(topPtr));
else
{
std::cout<< "Invalid expression: returning 0"<< std::endl;
return(0);
}
}
}
}
int arithmetic_expression::evaluateTree(TreeNodePtr rootPtr)
{
if ((rootPtr->Op=="+") | (rootPtr->Op=="-")|(rootPtr->Op=="*")|(rootPtr->Op== "/"))
{
if (rootPtr->Op=="+")
{
return(evaluateTree(rootPtr->leftPtr)+ evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="-")
{
return(evaluateTree(rootPtr->leftPtr)- evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="*")
{
return(evaluateTree(rootPtr->leftPtr)* evaluateTree(rootPtr->rightPtr));
}
if (rootPtr->Op=="/")
{
return(evaluateTree(rootPtr->leftPtr)/ evaluateTree(rootPtr->rightPtr));
}
}
else
{
int Number;
std::istringstream(rootPtr->Op) >> Number;
return(Number);
}
答案 0 :(得分:1)
您确实需要一个树来进行表达式评估,std::map
在内部使用树。这并不意味着它们是天生的匹配。
特别是,std::map<std::string, int>
只能容纳每个字符串的一个出现,并按这些字符串排序。表达式树可以包含多个相同的子表达式,并按表达式求值的算术规则排序。