Re: [問題] 2位數以上的四則運算

作者: dirkc (3781615)   2014-10-29 15:25:54
因為要回的東西稍多,所以另外開一篇。
首先是原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

Links booklink

Contact Us: admin [ a t ] ucptt.com