表示式轉換 模擬

2022-05-01 06:33:09 字數 2354 閱讀 7086

7-6 表示式轉換(25 分)

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

輸入格式:

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

輸出格式:

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

輸入樣例:

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

輸出樣例:

2 3 7 4 - * + 8 4 / +

思路

中綴轉字尾 的原則

1.遇到運算元,直接輸出;

2.棧為空時,遇到運算子,入棧;

3.遇到左括號,將其入棧;

4.遇到右括號,執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;

5.遇到其他運算子』+」-」*」/』時,彈出所有優先順序大於或等於該運算子的棧頂元素,然後將該運算子入棧;

6.最終將棧中的元素依次出棧,輸出。

經過上面的步驟,得到的輸出既是轉換得到的字尾表示式。

舉例:a+b*c+(d*e+f)g ———> abc+de*f+g*+

然後 有幾個 坑點

0.運算元 不一定是一位的 比如 23+2 應該是 23 2 +

1.運算元可能是浮點數 比如 2.3+2 應該是 2.3 2 +

2.可能是負數 比如 -2+3 應該是 -2 3 +

比如 3+(-2) 應該是 3 -2 +

3.正數可能帶有正號 比如 +3+2 應該是 3 2 +

比如 3+(+2) 應該是 3 2 +

然後處理下空格就可以了

ac**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(a) memset(a, 0, sizeof(a))

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

typedef pair pii;

typedef pair pll;

typedef pair psi;

typedef pair pss;

const

double pi = 3.14159265358979323846264338327;

const

double e = exp(1);

const

double eps = 1e-6;

const

int inf = 0x3f3f3f3f;

const

int maxn = 1e3 + 5;

const

int mod = 1e9 + 7;

bool

isdigit(char c)

int main()

q.push(s[i]);}}

else

if (s[i] == '+')

q.push(s[i]);}}

else

if (s[i] == '-')

else

if (q.empty())

q.push(s[i]);

else

q.push(s[i]);}}

else

if (s[i] == '(')

q.push(s[i]);

else

if (s[i] == ')')

q.pop();}}

}while (!q.empty())

cout

<< ans << endl;

}

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

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

表示式轉換

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

表示式轉換

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