[問題] 如何在中置式轉後置式中間加空格

看板C_and_CPP作者 (嘎樂 K.O)時間9年前 (2015/04/07 11:16), 9年前編輯推噓9(9013)
留言22則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我目前已完成了中置運算式轉後置運算式的程式碼 但我想在算式之間穿差空格 該如何 該如何變化? 餵入的資料(Input): 12+12+13 A+B 預期的正確結果(Expected Output): 12 12 + 13 + A B + 錯誤結果(Wrong Output): 1212+13+ AB+ 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/YedF6N 補充說明(Supplement): 程式碼有點長 所以貼於網址中 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.168.205.153 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1428376563.A.160.html

04/07 12:20, , 1F
(純好奇)你都會轉了,卻不會加空格?
04/07 12:20, 1F
哈哈 因為我整個程式都打完之後 發現我缺了空格 但是空格怎麼改 輸出都怪怪的

04/07 13:19, , 2F
您如果只是要加空格的話,不就在您的 %c 後面加個空格
04/07 13:19, 2F

04/07 13:19, , 3F
就可以。只是我與前面網友其實有同樣的好奇。
04/07 13:19, 3F

04/07 13:20, , 4F
另外您的寫法好像只是轉換,無法算出運算式的值。
04/07 13:20, 4F
我試過在%c後面加空格了 但他輸出會變成 1 2 1 2 + 1 3 + 會變成每個數字間都有空格 哈哈 我主要只有轉換啦 沒有要算出值 ※ 編輯: november1121 (118.168.205.153), 04/07/2015 22:28:56 ※ 編輯: november1121 (118.168.205.153), 04/07/2015 22:30:47

04/07 22:30, , 5F
提示: 不是每個都要加. 還有的地方可能要額外加
04/07 22:30, 5F
是額外在加迴圈 加空格嗎... 有點沒頭緒ㄟ 再思考看看好了 謝囉:) ※ 編輯: november1121 (118.168.205.153), 04/07/2015 22:34:34 ※ 編輯: november1121 (118.168.205.153), 04/07/2015 22:47:40

04/08 04:43, , 6F
不然您就在 + - * / 後面那個輸出 %c 前後都加空格就好
04/08 04:43, 6F

04/08 04:44, , 7F
不過這樣好像也不行,中序可以這樣做,後序就不行了。
04/08 04:44, 7F

04/08 04:44, , 8F
正常的做法是您在轉換之前需要先將每個運算元切出來
04/08 04:44, 8F

04/08 04:45, , 9F
這樣您才能夠在運算元之間加空格,您似乎沒有切運算元
04/08 04:45, 9F

04/08 04:50, , 10F
應該是在讀到運算子時要記錄一下,之後要輸出運算元時
04/08 04:50, 10F

04/08 04:51, , 11F
就加個空格,運算子後面也加個空格。我好像應該改看看
04/08 04:51, 11F

04/08 05:02, , 12F
可以 work,我試過了。在'\0'與+-*/後那個 %c 前面
04/08 05:02, 12F

04/08 05:02, , 13F
加個空格。default 那個就是要記錄是否運算元再決定
04/08 05:02, 13F

04/08 05:03, , 14F
是否加空格。
04/08 05:03, 14F

04/08 05:03, , 15F
「是否運算子之後再決定是否加空格」才對。
04/08 05:03, 15F

04/08 07:59, , 16F
另一個寫法就是 default 那個不加, 在運算子處理就好
04/08 07:59, 16F

04/08 08:00, , 17F
可是 postfix 會有出現連續運算元的情形
04/08 08:00, 17F

04/08 08:47, , 18F
那沒關係
04/08 08:47, 18F

04/08 23:35, , 19F
偵測到運算子立刻加空白,輸出運算子前後加空白。
04/08 23:35, 19F

04/08 23:39, , 20F
不好意思,修正一下,輸出運算子前加空白即可,後免加。
04/08 23:39, 20F
謝謝各位囉~~~ 最後我做出來是這樣子 http://ideone.com/6twgyk 只是 最後 我試了一個數據 怪怪的 (300+23)*(43-21)/(84+7) 最後出來是300 23+ 43 21- * 84 7+ / 只剩+號跟-號前面沒有空白... 其他都正常.. ※ 編輯: november1121 (118.168.201.113), 04/13/2015 00:47:38

04/13 12:18, , 21F
如果只針對您的case,只要 case ')' 那個輸入改成" %c"
04/13 12:18, 21F

04/13 12:29, , 22F
62 行的 printf("%c",stack[top]); %c 前加個空格即可
04/13 12:29, 22F
文章代碼(AID): #1L8qlp5W (C_and_CPP)