計算字串表示式的值

2021-09-29 21:19:29 字數 1039 閱讀 3204

舉個簡單的例子,平常我們寫的數學表示式a+b,就是一種中綴表示式,寫成字尾表示式就是ab+。再舉乙個複雜的例子,中綴表示式(a+b)*c-(a+b)/e的逆波蘭式是ab+c*ab+e/-。

(1)首先,需要分配1個棧,用於臨時儲存運算子,此運算子在棧內遵循越往棧頂優先順序越高的原則;

(2)從中綴式的左端開始逐個讀取字元x,逐序進行如下步驟:

1.若x是運算元,,將x直接加入ans後邊;

2.若x是運算子,則分情況討論:

若x是'(',則直接壓入棧s;

若x是')',則將距離棧s棧頂的最近的'('之間的運算子,逐個出棧,依次加入ans,此時拋棄'(';

若x是除'('和')'外的運算子,則再分如下情況討論:

若當前棧s的棧頂元素為'(',則將x直接壓入棧s;

若當前棧s的棧頂元素不為'(',則將x與棧s的棧頂元素比較,若x的優先順序大於棧頂運算子優先順序,則將x直接壓入棧s。否者,將棧頂運算子彈出,加入ans,直到棧頂運算子優先級別低於(不包括等於)x的優先順序,此時再則將x壓入棧;

【第二步是乙個迴圈,要把中綴式讀完。第三步是在迴圈之外】

(3)在進行完(2)後,檢查棧是否為空,若不為空,則將棧中元素依次彈出並加入ans

(4)完成上述步驟後,ans便為逆波蘭式輸出結果。 

#includeusing namespace std;

int judge(char data)

return res;

}string getnibolan(string str)

else

}if(s.empty())

s.push(cur);

}else}}

//問題1 忘記了輸出出棧中的所有元素

while (!s.empty())

return newstr;

}int main()

}else

}return s.top();

}};

為了方便程式,我們一般在中綴式轉逆波蘭式的時候,用乙個列表裝下每乙個token(數字要拼接好) 。

字串 中綴 字尾 計算表示式的值

includeusing namespace std include define maxsize 100 stackstack1 棧來放字尾表示式的符號 char suffix maxsize 轉化後的字尾表示式 int n 1 表示suffix字元陣列的index,初始化為 1 int prio...

求字串表示式的值

求字串表示式的值,這裡主要使用的知識是棧.為了更好的使用,這裡定義乙個棧標頭檔案,其中包括基本的棧操作.ifndef stack h define stack h typedef char datatype typedef struct stack void init stack stack s,i...

如何計算字串表示式

using system using system.codedom using system.codedom.piler using microsoft.csharp using system.reflection public class eval r n public object getval...