使用C ++的首选语言//
基本上下面的表达式已经转换为C ++后缀表达式。现在我需要估计结果。
我以某种方式使用deque,而不是堆栈,因为我尝试使用堆栈,它似乎没有工作。但是有bug。
7 8 9 + 1 7 - *
-102
这是我的代码:
string line; inf >> line;
deque <int> stack;
for(int i = 0; i < line.length(); i+=2){
if(line.at(i) == '*'){
stack.push_back(stack.pop_back() * stack.pop_back());
}
else if(line.at(i) == '+'){
stack.push_back(stack.pop_back() + stack.pop_back());
}
else if(line.at(i) == '-'){
stack.push_back(-stack.pop_back() + stack.pop_back());
}
else stack.push_back(line.at(i)- '0');
}
outf << stack.pop_back() << endl;
return 0;
使用上面的代码,我可以通过一个小的调整进行更改,并将其更改为前缀表示法。
我仍然更喜欢使用C ++中的std :: deque STL库。
你正在使用std :: deque <> :: pop_back()错误。它只是从双端队列中删除了最后一个元素并且没有返回任何内容,因此所有stack.pop_back() + stack.pop_back()
等都不会编译。相反,对于每个stack.pop_back()
,你将不得不做一个operand = stack.back(); mydeque.pop_back();
。你可以将它包装在一个小函数中:
int pop_stack( std::deque<int>& _stack )
{
int result = _stack.back();
_stack.pop_back();
return result;
}
然后用这个函数替换你所有的stack.pop_back()
:pop_stack(stack)
由于std::stack
的行为几乎相同(除了方法命名),因此没有理由使用std::deque
,你也可以使用堆栈。
此外,似乎只有一个操作数太多:7 8 9 + 1 7 - *
正确评估-102
- 并且在堆栈中丢失了7
。
操作数评估:
7 8 9 +
7 17
7 17 1 7 -
7 17 -6
7 17 -6 *
最后:
7 -102