表示式求值 棧的應用

2021-06-18 01:11:16 字數 1420 閱讀 6796

表示式求值

西西設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它

知道函式min(20,23)的值是20 ,add(10,98) 的值是108等等。經過訓練,西西設計的機械人卡多

甚至會計算一種巢狀的更複雜的表示式。

假設表示式可以簡單定義為:

1.  乙個正的十進位制數 x 是乙個表示式。

2.  如果 x 和 y 是 表示式,則 函式min(x,y )也是表示式,其值為x,y 中的最小數。

3.  如果 x 和 y 是 表示式,則 函式max(x,y )也是表示式,其值為x,y 中的最大數。

4.如果 x 和 y 是 表示式,則 函式add(x,y )也是表示式,其值為x,y 之和。

例如, 表示式 add(max(add(1,2),7) 的值為 7。

請你編寫程式,對於給定的一組表示式,幫助 西西 算出正確答案,以便校對卡多計算的正誤。

【標準輸入】

第一行:n表示要計算的表示式個數 (1≤ n ≤ 10)

接下來有n行,   每行是乙個字串,表示待求值的表示式

(表示式中不會有多餘的空格,每行不超過300個字元,表示式中出現的十進位制數都不

超過1000。)

【標準輸出】

輸出有 n 行,每一行對應乙個表示式的值。 【 樣 例 】

標準輸入

標準輸出

3 add(1,2) 3

max(1,999)

999add(min(1,1000),add(100,99))

200

棧的操作:

在紙上按例子照著程式模擬一下就懂了

ac code

#include#include/*atoi()函式的標頭檔案,作用:將字串轉化為整數型別*/

#include#include#includeusing namespace std;

int main()

if(str[i]=='m'&&str[i+1]=='i')

if(str[i]=='m'&&str[i+1]=='a')

if(str[i]>='0'&&str[i+1]<='9')

s[j-i]=str[j];

}continue;

}if(str[i]==',')continue;/*遇到逗號跳過,沒有必要儲存*/

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

if(str[i]==')')/*遇到'('時就應該彈棧了*/

cstack.pop();

continue;

}} ans=istack.top();

istack.pop();

printf("%d\n",ans);

} return 0;

}

棧應用 表示式求值

include stdafx.h include using namespace std const int explenght 20 const int stack init size 20 const int stack incrment 10 templateclass stack stack...

棧應用 表示式求值

include include define length 100 初始分配棧的長度 define add len 10 棧長增量 typedef struct 定義字元棧 sqstack void initstack sqstack s 初始化乙個棧 void push sqstack s,int...

棧的應用 表示式求值

include include include define true 1 define flase 0 define ok 1 define error 0 define overflow 1 define stack size 100 define stackincrement 10 typed...