因为要回的东西稍多,所以另外开一篇。
首先是原po贴的程式码中,有一些可能的问题:
line 31,116: top 可能为 -1,line 116 中的 y 可能未定义。
line 32,142: 这里会呼叫 copy constructor,但是却未定义,
搭配成员变量中有使用 new char[] 容易有程式当掉的风险。
line 41,47: 和上面的理由一致,使用 new 通常需要 delete,
一般来说,如果成员变量中有 new,大概有三个东西需要定义:
copy constructor, assignment operator, descructor,
没定义也不是什么惊世骇俗的事啦,只是程式容易当掉,不是好习惯。
line 157: 这里比对 '\0',但是一开始 stack 只有用 new char[],
并无法确定 stack 一定会被初始化为 '\0',所以也有点风险。
line 189: infix 无定义字串空间,所以也有内存暴走的风险。
另外,关于本来的程式目的,一个简单的想法仅供参考...
把 stack 元素安排为字串,解析算式时,善用 cin.peek() 来判别运算子,
将运算子与算子都以字串形式储存于 stack 元素中。
按照你已经完成的 priority+postfix 逻辑计算,
过程中,每次取得元素时,将算子从字串数字转化为数值。
另外,你或许可以参考 std::stack 的用法,它帮你把 stack 定义好了。
以上希望有帮助。
※ 引述《amy99778 (かおる)》之铭言:
: 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: DEV C++
: 问题(Question):
: 最近在看Stack和Queue 想说写写看课本范例的四则运算
: 我是先用string把input存起来 再push到stack中
: 但是写完才发现我这样写只能用在只有个位数的情况...OTZ
: 后来试着用当还没遇到非数字的位元时 去做自身 sum = sum*10 + s[i]
: 这样写可以PUSH进去 但是当括号中是二位数以上就会ERROR..在判断后位时stack会empty
: 运算的地方也会出问题
: 可能因为我都用只有一个位数来写 很多地方都不太好改QQ
: 请问这样有办法改还是要重写比较好呢?
: 程式码(Code):(请善用置底文网页, 记得排版)
: http://codepad.org/jH1Vkhn7