stl表示式求值(支援括號空格版)

2021-05-24 21:42:42 字數 1342 閱讀 6163

1157:表示式的值

time limit:1000ms  memory limit:65536k

total submit:

94 accepted:27

[submit]   [status]   [discuss]

font size:

aa aa

aa

如果給你乙個只包含+,-,*,/,(,),及非負整數數字和空格組成的字串表示式,你能程式設計計算它的值嗎?不忙回答,,試試就知道了。

第一行為乙個n,表示測試樣例數。

以下n行每個樣例為乙個字串表示式,每個表示式至少乙個字元,可能包含空格,但長度不超過50.

對每一測試樣例,輸出它的值。

3

(2+3/3)+1

2+1/2-5

10*(2-2 )

4-30

題目輸入的表示式都是合法的.

在測試2中,我們認為1/2=0,所以最後答案為-3.

swust
solution——
#include//不用iostream是為了節約時間,避免g++的cin,cout類多餘時間消耗 

#include

#include

using namespace std;

int calculate(int c, int a, int b)//計算函式

int main()

;//運算子優先操作

scanf("%d", &n);

getchar();

while(n--)

if(!k)//前括號直接進站

if(k != 5)//運算子入棧

stkch.push(k);

num.push(0); }

else//讀取後括號進行括號處理

int b = num.top();

num.pop();

int a = num.top();

num.pop();

num.push(calculate(stkch.top(), a, b));

stkch.pop(); }

} }

while(!stkch.empty() && num.size() > 1)//化為簡單無括號型後的運算,可以說是後事處理

printf("%d/n", num.top());//最後棧頂即結果

num.pop();//數字出棧,歸還空間 }

return 0;

}

括號匹配與表示式求值問題

運算子定義優先順序 1 0 1 1 2 2 從原表示式求字尾式的規則為 1.新建運算子棧,棧底元素為 作為運算子棧的結束符號 從第乙個位置起掃瞄表示式 2.若當前字元是運算元,則直接傳送給字尾表示式,掃瞄位置加1 3.若當前字元為運算子且優先順序大於棧頂運算子,則進棧,掃瞄位置加1。4.若當前字元為...

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...