gpt4 book ai didi

c++ - 使用 std::map 评估表达式树

转载 作者:行者123 更新时间:2023-11-28 08:05:32 24 4
gpt4 key购买 nike

我正在使用抽象数据类型来评估表达式树,这与之前的不同方式相反,我不确定如何准确使用 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);
}

最佳答案

您确实需要一棵用于表达式计算的树,并且 std::map在内部使用树。这并不意味着他们是天作之合。

特别是 std::map<std::string, int>每个字符串只能包含一次,并按这些字符串排序。您的表达式树可以包含多个相同的子表达式,并按表达式计算的算术规则排序。

关于c++ - 使用 std::map 评估表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com