【发布时间】:2019-02-03 21:50:21
【问题描述】:
以下代码在函数中,结果是对布尔值的引用。
trueValues 和 false 值是一组字符,它们会导致真或假语句。
stack<bool> operandStack;
for (int k = 0; k < postfix.size(); k++)
{
char ch = postfix[k];
if (ch != '!' && ch != '&' && ch != '|')
{
if (trueValues.contains(ch))
{
operandStack.push(true);
}
if (falseValues.contains(ch))
{
operandStack.push(false);
}
}
else if (ch == '!' || ch == '&' || ch == '|')
{
bool operand2 = operandStack.top();
operandStack.pop();
bool operand1 = operandStack.top();
operandStack.pop();
switch(ch)
{
case '!':
operandStack.push(operand1 != operand2);
case '&':
operandStack.push(operand1 && operand2);
case '|':
operandStack.push(operand1 || operand2);
}
}
}
result = operandStack.top();
注释掉result = 行可以消除错误消息。
【问题讨论】:
-
如果栈为空会崩溃,也有可能发生这种情况。
-
你能显示真值和假值初始化吗?
-
对于我现在正在处理的测试用例,我已确保堆栈不为空。
-
trueValues 和 falseValues 是双向链表。我检查字符串中的字母是否在这些集合中,然后将 true 或 false 推送到操作数堆栈。
-
@AshBal 缺少的
break;语句是有意的,并且您真的想在传输到特定的case值标签后执行所有语句吗?
标签: c++ stack boolean data-management