堆疊 表示式轉換

2021-10-20 18:36:49 字數 2697 閱讀 5607

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

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

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

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

輸入輸出說明0

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

2 3 7 4 - * + 8 4 / +

正常測試6種運算子

1((2+3)*4-(8+2))/5

2 3 + 4 * 8 2 + - 5 /

巢狀括號

21314+25.5*12

1314 25.5 12 * +

運算數超過1位整數且有非整數出現

3-2*(+3)

-2 3 *

運算數前有正負號

4123

123只有乙個數字

借助輔助棧s2用於存運算子

待操作運算子

出入狀態

s2棧頂運算子

+ -出:

+ - * /入:(

* /出:

* /入:

+ - ((入:

直接進)

出:直接出直到遇到 (

#include

#include

#include

#include

using

namespace std;

intmain()

//+的前面是 + - * / ( 且後面是數字時說明該資料是正數,忽略+

if(i !=

0&& s[i]

=='+'&&(

(s[i -1]

<

'0'|| s[i -1]

>

'9')

&&(s[i -1]

!=')'))

&&(s[i +1]

>=

'0'&& s[i +1]

<=

'9')

)continue

;//-的前面是 + - * / ( 是數字時說明該資料是負數

if(i !=

0&& s[i]

=='-'&&(

(s[i -1]

<

'0'|| s[i -1]

>

'9')

&& s[i -1]

!=')')&&

(s[i +1]

>=

'0'|| s[i +1]

<=

'9')

)//運算子前後都是數字的時候

if(s[i]

=='+'

|| s[i]

=='-'

|| s[i]

=='*'

|| s[i]

=='/'

|| s[i]

=='('

|| s[i]

==')'

) data +

= s[i]

;//連線前乙個字元

if(i == s.

size()

-1)v.push_back

(data);}

stacks1, s2;

//借助輔助棧s2用於存運算子

string ch;

for(

int i =

0; i < v.

size()

; i++

) s2.

push

(ch);}

}else s2.

push

(ch)

;//符號空直接插入

}else

if(ch ==

"*"|| ch ==

"/")

s2.push

(ch);}

}else s2.

push

(ch)

;//符號空直接插入

}else

if(ch ==

"(")

s2.push

(ch)

;else

if(ch ==

")")

s1.push

(s2.

top())

; s2.

pop();

}}else s1.

push

(ch);}

while

(!s2.

empty()

) stackans;

while

(!s1.

empty()

)int flag =0;

while

(!ans.

empty()

)return0;

}

錯誤點:資料預處理時的特判部分卡了好久,卡在「運算數前有正負號」這部分

表示式轉換 中綴表示式轉換為字尾表示式

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

表示式轉換

2 3 7 4 8 4 2 3 7 4 8 4 思路 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾表示式中,直到出現 從棧中刪除 c.若為 除括號外的其他運算子,當其優先順序高於除 以外的棧頂運算子時,直接入棧。否則從棧頂開始,依次彈出比當前處理的運算子優先順序高和優先順序相等的運算子,...

表示式轉換

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