不帶括號的表示式計算

2021-09-01 02:48:23 字數 906 閱讀 5449

一、表示式形式

2*3+6/3+5

二、問題

假設一中的表示式是一段程式可讀的字串,如何計算表示式的值

三、思路

1.建立兩個棧,分別為數字棧、和運算子棧

2.遍歷字串

3.當遇到數字將數字儲存到數字棧中

4.當遇到運算子時,比較運算子棧頂元素和當前運算子的優先順序

4.1若當前元素大於棧頂元素,將當前元素壓入運算子棧

4.2若當前元素小於等於棧頂元素,將棧頂元素彈出

4.2.1將數字棧中的前兩個元素彈出與運算子棧彈出的元素計算結果

4.2.2將計算結果儲存到數字棧中

5.遍歷結束後,重複4步驟直到運算子棧沒有運算子

6.最後表示式的結果為棧頂元素

**:

//比較運算子優先順序

int cmp(const char a, const char b)

int cal(int a, int b, const char op)

/**

*應為表示式沒有括號

*所以要考慮運算子的優先順序

*將優先順序儲存在map中,並在cmp函式中比較

*當將要入棧的運算子的優先順序小於或等於則計算

*棧頂元素相鄰數字的結果

*/void calculator2(const string &s)

num.push(number);

} else if (cmp(op.top(), ch)==0)

else

} while (op.top()!='$')

cout << "計算結果:";

cout << num.top();

}

帶括號的表示式計算

時間限制 1 s 記憶體限制 256 mb 測試點數 5 題目描述 小明在你的幫助下,破密了ferrari設的密碼門,正要往前走,突然又出現了乙個密碼門,門上有乙個算式,其中只有 0 9 求出的值就是密碼。小明數學學得不好,還需你幫他的忙。用整數除法 輸入格式 共1行,為乙個算式。輸出格式 共1行,...

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no 輸入樣例 1 2 x y...

表示式括號匹配

假設乙個表示式有英文本母 小寫 運算子 和左右小 圓 括號構成,以 作為表示式的結束符。請編寫乙個程式檢查表示式中的左右圓括號是否匹配,若匹配,則返回 yes 否則返回 no 表示式長度小於255,左圓括號少於20個。輸入格式 一行 表示式 輸出格式 一行 yes 或 no include incl...