算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。
輸入格式:
輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過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 均不匹配 基本思路 遞迴,根據模式中...