表示式求值

2021-09-25 04:40:52 字數 2838 閱讀 9529

/*

用到了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 ...