表示式求值

2021-05-27 01:13:00 字數 1180 閱讀 5946

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。。。

先貼第一次的**:

#include#include#include#include#include#includeusing namespace std;

char data[7][7]=,,,

,,,};

int sign(char ch)

}char preorder(char a, char b) //入棧前判斷兩個運算子

double calculate(double a, char oper, double b) //四則運算

}int main()

else if((str[i] > '9' || str[i] < '0') && str[i] != '.') //運算子處理

}i++; //讀取下乙個字元

} printf("%.2lf\n", num.back());

} return 0;

}

優化2個地方:

1.棧中不會出現右括號,所以data第五行可以置空。

2.sscanf(&str[i], "%lf%n", &temp, &len)中len記錄temp的長度,下面直接用i += i+len-1則可以避免多次迴圈,節省讀取double資料的時間。特別注意:(是%n不是%d)

優化後,**如下:

#include#include#include#include#include#includeusing namespace std;

char data[7][7]=,,,

,,,};

int sign(char ch)

}char preorder(char a, char b) //入棧前判斷兩個運算子

double calculate(double a, char oper, double b) //四則運算

}int main()

else if((str[i] > '9' || str[i] < '0') && str[i] != '.') //運算子處理

}i++; //讀取下乙個字元

} printf("%.2lf\n", num.back());

} return 0;

}

表示式求值

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

表示式求值

description 輸入中綴算術表示式s,s 中的運算元為非負整數,只含 和 運算,也可能含有括號 運算子的計算順序和實際四則運算的計算順序相同 輸出 表示式s 的值.注意除法運算只取整數部分,例如 1 2 0.input 輸入有多組資料.每組資料是乙個算術表示式s,s的長度不超過100.輸入的...