表示式求值問題

2021-08-28 13:00:08 字數 1054 閱讀 9013

這是清華大學鄧俊輝資料結構(c++)中的乙個案例,通過使用棧這種資料結構,完成了較為複雜的表示式求值問題,以下**是我整理改編而成,能夠完成加減乘除,乘方、階乘的運算,以及括號的處理。

在這裡,我使用到了c++ stl 中的容器stack。

#include#include#include#include#includeusing namespace std;

#define n_optr 9

//建立兩個棧,乙個儲存數字,乙個儲存符號

stackopnd;//儲存數字

stackoptr;//儲存字元

typedef enum operator;

const char pri[n_optr][n_optr] = //運算子優先順序表

;operator convert(char s) //返回列舉型別

}bool isdigit(char s) //判斷讀取到的字元是否是數字

float calcu(float popnd) //階乘單目運算

float calcu(float a, char op, float b) //普通雙目運算

}char orderbetween(char s1, char s2) 判斷棧頂運算子與正在讀取到的運算子優先順序

void readnum(char *& s) //處理數字,尤其是如23這種連在一塊的數字

if (*s != '.') return; //判斷是否有小數點

float fration = 1; //進行小數點後面運算

while (isdigit(*(++s))) }

float evalue(char *s)

else

break;

case '>':

else

} break;

case '=':

break;

default: exit(-1);

}} }

return opnd.top();

}int main()

表示式求值問題之表示式樹

include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...

表示式求值的問題

include include include define false 0 define true 1 define error 0 define ok 1 define overflow 1 typedef int status stack typedef char selemtype defi...

NYOJ 表示式求值問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 4描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入第...