[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 ...