




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#include #include #include #include using namespace std; enum types DELIMITER = 1, VARIABLE, NUMBER; /定義枚舉類型把DELIMITER初試化為后面的相應(yīng)的是前面值+1 int error_type = -1; class calculator char *cal_p; / 定義一個(gè)指向表達(dá)式的指針 char token80; / 存儲(chǔ)表達(dá)式中的字符變量 char tok_type; / 存儲(chǔ)具體是什么類型 void cal_p2(double &result); void cal_p3(dou
2、ble &result); void cal_p4(double &result); void cal_p5(double &result); void cal_p6(double &result); void atom(double &result); /把字符串轉(zhuǎn)換為浮點(diǎn)數(shù) void get_token(); /取得下一個(gè)字符 void error(int err); /顯示打印出錯(cuò)信息 int isdelim(char c); /判斷是否為分隔符public: calculator();/類的構(gòu)造函數(shù) double cal(char *exp); int error_type; / 存儲(chǔ)
3、錯(cuò)誤信息; / 類構(gòu)照函數(shù)的具體實(shí)現(xiàn)calculator:calculator() cal_p = NULL;/把exp_ptr的指針初始化為空 error_type = -1; / 方法eval_exp的具體實(shí)現(xiàn)過程double calculator:cal(char *p) double result; cal_p = p;/把傳遞過來的參數(shù)p賦給cal_p get_token(); if(!*token) error(2); /輸出沒有任何表達(dá)式的錯(cuò)誤信息 return 0.0; cal_p2(result); if(*token)error(0); / last token must
4、be null return result; / 兩個(gè)變量字符是加或者減操作void calculator:cal_p2(double &result) register char op; double temp; cal_p3(result); while(op = *token) = +|op = -) get_token(); cal_p3(temp); switch(op) case -: result = result - temp; break; case +: result = result + temp; break; / 兩個(gè)變量是乘或者除操作或者是取余void calcul
5、ator:cal_p3(double &result) register char op; double temp; cal_p4(result); while(op = *token) = * |op = / | op = %) get_token(); cal_p4(temp); switch(op) case *: result = result * temp; break; case /: if (temp = 0) error(3);elseresult = result / temp; /除數(shù)為零的情況要考慮進(jìn)去 break; case %: result = (int) resu
6、lt % (int) temp; break; / 進(jìn)行運(yùn)算void calculator:cal_p4(double &result) double temp, ex; register int t; cal_p5(result); if(*token= ) get_token(); cal_p4(temp); ex = result; if(temp=0.0) result = 1.0; return; for(t=(int)temp-1; t0; -t) result = result * (double)ex; void calculator:cal_p5(double &result
7、) register char op; op = 0; if(tok_type = DELIMITER) & *token=+ | *token = -) op = *token; get_token(); cal_p6(result); if(op=-) result = -result; / 進(jìn)行有括號(hào)的算法void calculator:cal_p6(double &result) if(*token = () get_token(); cal_p2(result); if(*token != ) error(1); get_token(); else atom(result); / 取
8、得數(shù)值void calculator:atom(double &result) switch(tok_type) case NUMBER: result = atof(token); /atof()把字符串轉(zhuǎn)換成浮點(diǎn)數(shù)double atof( const char *str ); get_token(); return; default: error(0); / 輸出出錯(cuò)信息. void calculator:error(int err) error_type = err; static char *e= 語法錯(cuò)誤!請(qǐng)核對(duì)后重新輸入, 缺少一個(gè)括號(hào)!請(qǐng)核對(duì)后再輸入, 您沒有輸入任何表達(dá)式!,
9、除數(shù)不能為!請(qǐng)核對(duì)后重新輸入 ; cout eerr endl; / 取得下一個(gè)token值void calculator:get_token() register char *temp; /register修飾符暗示編譯程序相應(yīng)的變量將被頻繁地使用,如果可能的話,應(yīng)將其保存在CPU的寄存器中,以加快其存儲(chǔ)速度 tok_type = 0; temp = token; *temp = 0; /空字符 if(!*cal_p) return; / 如果到表達(dá)式末尾則返回 while(isspace(*cal_p) +cal_p; / 若參數(shù)c為空格字符,則返回TRUE,否則返回NULL(0) if(
10、strchr(+-*/%=(), *cal_p) /用strchr函數(shù)在字符串+-*/%=()中查找*exp_ptr指向的字符所在位置,判斷返回值(非為真就執(zhí)行)以便是否執(zhí)行以下語句 tok_type = DELIMITER;/把tok_type置為DELIMITER / advance to next char *temp+ = *cal_p+; else if(isalpha(*cal_p) /當(dāng)參數(shù)c為大寫英文字母(A-Z)時(shí),返回非零值,否則返回零 while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判斷是否是分隔符,當(dāng)*exp_ptr指向
11、的字符不為分隔符時(shí)把值賦給*temp tok_type = VARIABLE;/把tok_type置為VARIABLE else if(isdigit(*cal_p) / isdigit判斷*exp_ptr指向的字符是否為數(shù)字 while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判斷是否是分隔符,當(dāng)*exp_ptr指向的字符不為分隔符時(shí)把值賦給*temp tok_type = NUMBER; *temp = 0; /空格 / isdelim函數(shù)的具體實(shí)現(xiàn),如果參數(shù)是一個(gè)分隔符則返回真int calculator:isdelim(char c) if(strchr( +-/*%=(), c) /把+-/*%=()09r定義非分隔符,/r回車 return 1; return 0; /strchr(const char *s,char c),返回首次出現(xiàn)c的位置的指針,如果s中不存在c則返回NULL。int main() char calchar80; calculator ob; / 創(chuàng)建一個(gè)calculator類型的實(shí)例 double result; fo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)業(yè)生產(chǎn)安全管理與控制措施指南
- 觀光農(nóng)業(yè)規(guī)劃
- 供熱項(xiàng)目可行性研究報(bào)告
- 區(qū)塊鏈技術(shù)在數(shù)字版權(quán)保護(hù)中的應(yīng)用指南
- 基礎(chǔ)設(shè)施建設(shè)項(xiàng)目可研報(bào)告
- 云倉項(xiàng)目可行性研究報(bào)告
- 公司內(nèi)部規(guī)章制度培訓(xùn)教程
- 三基訓(xùn)練護(hù)理復(fù)習(xí)試題有答案
- 企業(yè)營(yíng)銷自動(dòng)化技術(shù)應(yīng)用及效果評(píng)估報(bào)告
- 主管護(hù)師內(nèi)科護(hù)理練習(xí)測(cè)試卷(一)
- GB 10133-2014食品安全國家標(biāo)準(zhǔn)水產(chǎn)調(diào)味品
- 講題比賽游戲中的必勝策略問題-(取棋子游戲)課件
- 旅游學(xué)概論李天元版復(fù)習(xí)總結(jié)
- 人教版八年級(jí)上歷史思維導(dǎo)圖課件
- 重慶大學(xué)介紹課件
- 江蘇省南京市2020年中考英語試題
- 《電氣裝配車間生產(chǎn)工序流程卡》中英文對(duì)譯版
- 四年級(jí)下冊(cè)英語課件:Unit 4 There are seven days in a week-Lesson 19人教精通版
- 千分尺公開課教案
- 加油站承重罐區(qū)安全風(fēng)險(xiǎn)及管理
- 拱涵計(jì)算書-6.0m-1m
評(píng)論
0/150
提交評(píng)論