寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。。。
先貼第一次的**:
#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.輸入的...