【发布时间】:2015-07-03 08:27:02
【问题描述】:
我有这个代码:
#include <iostream>
#include <string>
#include “stack.h”
int main (int argc, char *argv[]) {
char *a = argv[1];
int N = strlen(a);
stack<int> polish(N); int el;
for (int i = 0; i < N; i++){
if (a[i] == '+'){
el = polish.readStack(); polish.outofStack();
polish.inStack( el + polish.readStack()); polish.outofStack()
}
if (a[i] == '*'){
el = polish.readStack(); polish.outofStack();
polish.inStack(el * polish.readStack()); polish.outofStack()
}
if ((a[i] >= '0') && (a[i] <= '9')){
el = polish.readStack(); polish.outofStack()
polish.inStack(10 * el + (a[i++]-'0'));
}
}
cout << polish.outofStack() << endl;
}
它是如何工作的?这条线是什么意思?
polish.inStack(10 * el + (a[i++]-'0'));
【问题讨论】:
-
stack这样一个奇怪的实现。调用方法push和pop而不是readStack和inStack是一种众所周知的做法。此外,pop应该自动删除最后一个元素,而无需调用outOfStack。 -
如果我错了,请纠正我,但这应该不起作用:我们推入堆栈的操作结果(不删除第二个操作数)然后丢弃?!
-
polish.inStack(10 * el + (a[i++]-'0'));如果您假设stack<int>::readStack()返回int这意味着您传递了 10 * 该调用的结果 + 作为输入给stack<int>::inStack();的下一个字符 -
@YeldarKurmangaliyev 看起来像一个带有非标准名称的标准接口 -
inStack是push,readStack是top,outOfStack是pop。