Re: [問題] 一開始就要輸入"算式" 像1+2*3 然後輸出7

看板C_and_CPP作者 (旅之夢)時間13年前 (2010/10/09 15:58), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《calqlus (東方一隻鹿)》之銘言: : ( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) : ( 未必需要依照此格式,文章條理清楚即可 ) : 遇到的問題: (題意請描述清楚) : 題目有些英文看不懂 : 所以先直接原題目po網址 : http://0rz.tw/b0zBf : 大概了解 : 會出現的運算符號有 四則運算和 表示負號的- 以及括號() 取餘數% : 看到這題目的印象 : 就是用C++的operator : 不過很快就發現 那些符號是要強制輸入的-.- : 於是想到第二個 用堆疊 : 不過問題就在這了吧 : 是要怎麼樣把 像一次輸入的 789-(400+300) 好好的拆開 : 也許要先宣告字串先放再拆 : 不過我會用到strpbrk()那個函式...最近老是用它也蠻煩的 : 所以想問 : 有沒有更快 或 比較不用用到奇怪的函式的方法 : 感謝 提供一個想法,有錯請指正 用遞洄方式建一個類似下面的樹 分割順序是將四則運算的規則反過來, '-'是減號還是負號就自己在多加點判斷 EX:(A+B)*C+D                  (A+B)*C+D                  / ∣ \               (A+B)*C  + D / ∣ \ (A+B) * C   / ∣ \           ( A+B ) /∣\ A + B 建完之後再從葉節點把值計算完後傳回上層 (這裡就知道為何分割順序與四則運算的規則相反) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.123.87.131

10/09 20:58, , 1F
這其實就是個簡單的 recursive descendant parser 啊 XD
10/09 20:58, 1F

10/09 21:57, , 2F
不需要樹狀分割.這裡要用到分割只是要把二個以上的數字視為
10/09 21:57, 2F

10/09 21:59, , 3F
同一個數,只要按()+-*/任意順序分割再整理到陣列中即可.
10/09 21:59, 3F

10/09 21:59, , 4F
不過,遞迴處理是一定要的.
10/09 21:59, 4F
樹只是一種方便說明的概念 實做方式隨人 ※ 編輯: tabinoyume 來自: 122.123.84.161 (10/09 22:06)

10/09 23:12, , 5F
嗯,沒錯,不管任何順序分割,都是樹.
10/09 23:12, 5F
文章代碼(AID): #1Ci230fO (C_and_CPP)
文章代碼(AID): #1Ci230fO (C_and_CPP)