習題3 11 表示式轉換 刷題筆記

2021-10-08 13:21:09 字數 1226 閱讀 5010

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。

輸入格式:

輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過20個字元。

輸出格式:

在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。

輸入樣例:houxu

2+3*(7-4)+8/4

輸出樣例:
2 3 7 4 - * + 8 4 / +

思路: 首先要知道中序表示式怎麼轉換成後序表示式,借助棧來暫存和輸出運算子

遇到非運算子(正負號和小數點屬於非運算子),直接輸出;

如果是 『(』 直接壓棧;

如果是 『)』 依次輸出棧中的運算子,直到 『(』 為止(注意括號是不輸出的)

如果棧空或者當前運算子的優先順序大於棧頂運算子的優先順序,直接壓棧 ;

其他情況,都依次輸出棧中的運算子,只要滿足當前運算子的優先順序小於等於棧頂運算子的優先順序,且沒有碰到 『(』 ;

:居然要考慮小數點,正負號,題目都沒說。。。不過提交後還是有錯誤提示的,處理這些非運算子的時候需要稍微,處理一下

#include

#include

#include

#include

using

namespace std;

void

printk()

intmain()

while

(str[i+1]

=='.'

||str[i+1]

>=

'0'&&str[i+1]

<=

'9')

}else

ss.pop();

}else

if(ss.

empty()

||p[str[i]

]>p[ss.

top()]

)else

ss.push

(str[i]);

}}i++;}

while

(!ss.

empty()

)return0;

}

習題3 11 表示式轉換 25分

算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。在一行中輸出轉換後的字尾表示式,要求不同物件 運算數...

3 11 表示式轉換 25分

算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...

刷題 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 基本思路 遞迴,根據模式中...