5 20 表示式轉換 25分

2021-07-26 13:42:12 字數 1764 閱讀 5032

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

輸入格式:

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

輸出格式:

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

輸入樣例:

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

2 3 7 4 - * + 8 4 / +

**:

1 #include2 #include3 #include4 #include

5using

namespace

std;

6#define error 0

7#define ok 1

8#define overflow -2

9#define true 1

10#define false 0

11 typedef struct node *ptr;

12 typedef struct

nodesqstack;

1718

int initstack(sqstack &s) //

此處是構造乙個空棧

1926

int push(sqstack &s,char e)//

入棧操作

2735 *s.top++=e;

36return

ok;37}38

char gettop(sqstack s,char &e)//

返回頭頂指標

3945

46char pop(sqstack &s,char &e)

4753

54int isoperator(char

op)5566}

6768

int priority(char

op)6983}

8485

void postfix(char mid,char post,int len)//

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

8698

else

if(isoperator(mid[i]))//

如果接受到的符號是加減乘除的話

99105

while(priority(mid[i])>priority(gettop(abs,e)))

106push(abs,mid[i]);

107108

}109

else

if(mid[i]=='('

)110

push(abs,mid[i]);

111else

if(mid[i]==')'

)112

118pop(abs,e);

119}

120}

121while(gettop(abs,e)!='#'

)122

126}

127int

main()

128138 cout<139return0;

140 }

奇怪,我測試了我能想到的幾乎所有情況,都是對的呀。。。。。

5 20 表示式轉換 25分

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

5 20 表示式轉換 25分

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

表示式轉換 25 分

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