表示式求值

2021-12-29 22:43:00 字數 1837 閱讀 1042

[cpp]

描述:思路很簡單,優先順序比較完的情況下,採用兩個棧就可以完成了…… 

[cpp] 

#include  

#include  

#include  

#include "hanshu.h"  //標頭檔案 

using namespace std; 

int flag;//下面會多次用到flag 

int num_value(char *s,char *str,double *num,int len,int i,int j);//計算實數值存入num中 

char get_precede(char a,char b);//比較兩個字元優先順序,獲取優先順序 

int calculate_num(char c,double *num,int j);//優先順序比較大小後計算結果 

double solve_s(char *s ,char *str,double *num,int len);//處理函式,得出等式的結果 

int main() 

else if(c==')') 

} if(c=='\n')//討論幾種不符合情況的輸入 

memset(s,0,sizeof(s)); 

flag=len=left=right=0; 

} } 

return 0; 

} [cpp] 

//標頭檔案 

[cpp] 

#ifndef hanshu_h_included 

#define hanshu_h_included 

char str_operator= ; 

char str_precede[7][7]= 

,     , 

, , 

, ; 

extern int flag; 

int num_value(char *s,char *str,double *num,int len,int i,int j) 

else if(s[k]=='.') c=1; 

else break; 

for( c=0; c

num[j]/=10; 

if((i==1&&(s[i-1]=='+'||s[i-1]=='-'))||(i>=2&&(s[i-1]=='-'||s[i-1]=='+')&&s[i-2]=='(')) 

return k; 

} char get_precede(char a,char b) 

return str_precede[i][j]; 

} int calculate_num(char c,double *num,int j) 

if(c=='-'||c=='+'||c=='*'||c=='/') 

else return j+1; 

} double solve_s(char *s ,char *str,double *num,int len) 

j++; 

} char c=get_precede(str[k-1],s[i]); 

if(c=='

else if(c=='=') str[--k]=0; 

else if(c=='>') 

flag=0; 

j=calculate_num(str[k-1],num,j); 

if(flag) 

else break; 

} if(str[k-1]=='('&&s[i]==')') str[--k]=0; 

else str[k++]=s[i]; 

} } 

return num[0]; }  

#endif // hanshu_h_included 

表示式求值

程式的說明見清華大學出版社 資料結構 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...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...