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

看板C_and_CPP作者 (raisingeleven)時間10年前 (2014/10/29 15:25), 10年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
因為要回的東西稍多,所以另外開一篇。 首先是原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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.187.184 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414567557.A.C0A.html ※ 編輯: dirkc (111.249.187.184), 10/29/2014 15:26:49
文章代碼(AID): #1KK9Q5mA (C_and_CPP)
文章代碼(AID): #1KK9Q5mA (C_and_CPP)