我正在尝试从中缀转换为后缀(我还有更多工作要做)但我甚至无法继续工作,因为我收到了错误。
以下是错误所在:
//infix input is "1 + 2 * 3 - 4"
//tokens = {"1", "+", "2", "*", "3", "-", "4")
for(int i = 0; i < tokens.size(); i++)
{
if(isOperand(tokens[i]))
tempPostfix += tokens[i];
else if(isOperator(tokens[i]))
{
if(st.empty())
st.push(tokens[i]);
else if(getWeight(tokens[i]) > getWeight(st.top()))
st.push(tokens[i]);
else
{
while(getWeight(tokens[i]) <= getWeight(st.top()) && !st.empty())
{
tempPostfix += st.top();
st.pop(); //If there is only one item in the stack, it crashes
}
st.push(tokens[i]);
}
}
}
while(!st.empty())
{
tempPostfix += st.top();
st.pop();
}
string postfix = tempPostfix;
return postfix;
以下是我在其中调用的其他功能
bool isOperator(string s)
{
bool r = false;
if(s == "+" || s == "-" || s == "*" || s == "/")
r = true;
return r;
}
bool isOperand(string s)
{
bool r = false;
if(!isOperator(s) && s != "(" && s != ")")
r = true;
return r;
}
int getWeight(string op)
{
int weight = 0;
if(op == "+" || op == "-")
weight = 1;
if(op == "*" || op == "/")
weight = 2;
return weight;
}
一旦我弄清楚为什么我会在那里收到错误,我可以弄明白其余的。提前谢谢。
答案 0 :(得分:0)
您应该更改while循环中的条件顺序。如你所说,当堆栈中只剩下一个项目时会出现错误。因此,在弹出堆栈中的最后一项后,再次评估while循环中的条件,并且当显然堆栈中没有剩余项目时,您尝试执行st.top()操作。
要解决此问题,您可以轻松地重新排序条件,以便首先放置此!st.empty()。这样就会出现短路,因此不会评估其余的条件。