表示式的轉換

2022-08-22 08:30:14 字數 2632 閱讀 8790

平常我們書寫的表示式稱為中綴表示式,因為它將運算子放在兩個運算元中間,許多情況下為了確定運算順序,括號是不可少的,而字尾表示式就不必用括號了。字尾標記法:書寫表示式時採用運算緊跟在兩個運算元之後,從而實現了無括號處理和優先順序處理,使計算機的處理規則簡化為:從左到右順序完成計算,並用結果取而代之。例如:8-(3+2*6)/5+4可以寫為:8 3 2 6*+5/-4+ 其計算步驟為:

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

(2):8 3 12 + 5 / - 4 +

(3):8 15 5 / - 4 +

(4):8 3- 4 +

(5):5 4 +

(6):9

編寫乙個程式,完成這個轉換,要求輸出的每乙個資料間都留乙個空格。

輸入就一行,是乙個中綴表示式。輸入的符號中只有這些基本符號「0123456789+-*/^()」,並且不會出現形如2*-3的格式。表示式中的基本數字也都是一位的,不會出現形如12形式的數字。所輸入的字串不要判錯。

輸出若干個中綴表示式,第i+1行比第i行少乙個運算子和乙個運算元,最後一行只有乙個數字,表示運算結果。運算的結果可能為負數,「/」以整除運算。並且中間每一步都不會超過2^31。

樣例輸入

8-(3+2*6)/5+4
樣例輸出
8 3 2 6 * + 5 / - 4 + 

8 3 12 + 5 / - 4 +

8 15 5 / - 4 +

8 3 - 4 +

5 4 +

9

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;

typedef

long

double

ldb;

#define inf 99999999

#define pi acos(-1.0)

char s[200

];

char q[11111

];

char str[200

];

struct

nodeq2[

11111

];

struct

node1;

bool

operator

<(node1 a,node1 b)

setmyset;

set::iterator it;

int suan(int a,int b,char

str)

} int

main()

if(s[i]==')'

) str[tot++]=q[rear];

rear--;

} }

if(s[i]=='

+' || s[i]=='-'

) rear++;

q[rear]=s[i];

} if(s[i]=='

*' || s[i]=='/'

) str[tot++]=q[rear];

rear--;

} rear++;

q[rear]=s[i];

} if(s[i]=='^'

) str[tot++]=q[rear];

rear--;

} rear++;

q[rear]=s[i];

} }

while(front<=rear)

str[tot]='\0'

;

int flag=1

;

for(i=0;i)

printf("\n

");

intfront2,rear2;

front2=1

; rear2=0

; myset.clear();

for(i=0;i)

else

} char

c;

intindex,num1,num2;

while(front2<=rear2)

if((*it).indexelse printf("

%d",(*it).num);

it++;

} else

} printf("\n

");

} it=myset.begin();

cout

<<(*it).num<}

return

0;

}

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

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

表示式轉換

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

表示式轉換

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