7 20 表示式轉換 25分

2021-10-10 15:01:57 字數 2282 閱讀 8895

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

輸入格式:

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

輸出格式:

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

輸入樣例:

2+3

*(7-

4)+8

/4

輸出樣例:

237

4-*+

84/+

數字2,輸出 [數字在字尾表示式中都是直接輸出]

操作符+,入棧;

操作符*,入棧;

操作符(,入棧,

數字7,輸出;

操作符-,入棧;

數字4,輸出,

操作符,匹配棧中的(,並匹配前將棧頂資料依次出棧,即將(-出棧,並輸出-

操作符+,此時棧頂元素是操作符*,[按照先乘除後加減的原理],此時棧頂的*優先順序比將要入棧的*要大,所以,先讓棧內**出棧,並輸出;

遇到數字8,輸出;

操作符/,入棧;

數字4,輸出;

棧中仍有運算元,依次出棧列印棧中的操作符。

規則總結:

從左到右遍歷中綴表示式的每個數字和符號,若是數字則直接輸出,若是操作符,則判斷其與棧頂操作符的優先順序,是右括號或是優先順序低於或等於棧頂操作符,則棧頂元素依次出棧並輸出,直到遇到左括號或棧空才將後乙個操作符入棧。

#include

#include

#include

#include

using

namespace std;

string input, tmp;

map<

char

,int

>opera =,,

,,,}

;vectoroutput;

stack<

char

>st;

intmain()

);while

(i +

1< input.

size()

&&!opera.

count

(input[i +1]

))tmp +

= input[

++i]

; output.

push_back

(tmp);}

else

if(input[i]

=='('

) st.

push

('(');

else

if(input[i]

==')'))

; st.

pop();

} st.

pop();

}else);

st.pop();

} st.

push

(input[i]);

}while

(st.

size()

)); st.

pop();

}for

(int i =

0; i < output.

size()

;++i)

cout <<

(i ?

" ":"")

<< output[i]

;return0;

}

表示式轉換 25 分

首先規定優先順序,括號為最高優先順序,乘號或除號為次優先順序,加或減號為最低優先順序,至於數字,碰到就直接輸出即可。既然是數字,就有小數,整數,正數,負數之分,還有關於二元運算子的輸出,在括號內的二元運算子優先輸出,優先順序高的優先輸出 當然括號不算啊 根據題意,在輸出時可分為以下幾種情況。incl...

5 20 表示式轉換 25分

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

5 20 表示式轉換 25分

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