/*
用到了atof()字元轉浮點,以及c++中方法的過載
只含加減乘除的簡單算術表示式
1.先乘除後加減
2.從左算到右
3.先括號內後括號外
4.暫定輸入的表示式不會出現語法錯誤
演算法有點前序遍歷既視感
*/#ifndef pch_h
#define pch_h
#include
#include
#include
#include
#include
#include
constexpr auto error =0;
constexpr auto ok =1;
typedef
int status;
// todo: 新增要在此處預編譯的標頭
typedef
struct stacknode
stacknode,
*linkstack;
typedef
struct stacknum
stacknum,
*linknum;
status initstack
(linkstack &s)
;//初始化符號棧√
status initstack
(linknum &n)
;//初始化數字棧√
status push
(linkstack &s,
char ch)
;//入棧√
status push
(linknum &s,
double ch)
;//入棧√
status pop
(linkstack &s,
char
&e);
//出棧√
status pop
(linknum &n,
double
&e);
char
gettop
(linkstack s)
;//獲取棧頂元素√
double
gettop
(linknum n)
;status in
(char ch)
;//判斷是否為運算子,是返回1,不是返回0√
char
precede
(char a,
char b)
;//比較兩個字元之間的優先順序√
double
operate
(double a,
char theta,
double b)
;//運算√
double
evaluateexpression()
;//計算表示式√返回數字棧頂
#endif
//pch_h
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
----
--// pch.cpp: 與預編譯標頭對應的原始檔;編譯成功所必需的
#include
"pch.h"
// 一般情況下,忽略此檔案,但如果你使用的是預編譯標頭,請保留它。
status initstack
(linkstack &s)
status initstack
(linknum & n)
status push
(linkstack & s,
char ch)
status push
(linknum & n,
double ch)
status pop
(linkstack & s,
char
& e)
status pop
(linknum & n,
double
&e)char
gettop
(linkstack s)
double
gettop
(linknum n)
status in
(char ch)
}char
precede
(char a,
char b)
}else
if(a==
'*'||a==
'/')
}else
if(a==
'(')
}else
if(a==
')')
}else
if(a==
'#')
}return0;
}double
operate
(double a,
char theta,
double b)
return result;
}double
evaluateexpression()
else}}
return
gettop
(opnd);}
// evaluateexpression.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include
"pch.h"
#include
intmain()
表示式求值
程式的說明見清華大學出版社 資料結構 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 ...