簡單的表示式計算器,輸入乙個字串給出計算結果,數字支援小數,符號支援括號「()」和自定義雙目運算子(單字元),預定義了+,-,*,/,%,^六種運算子。原理就是中綴表示式string→字尾表示式vector→利用stack計算。
1.測試**
// 檔名:main.cpp
#include
#include
"calculator.h"
using
namespace std;
double
difference_of_square
(double a,
double b)
intmain()
catch
(runtime_error re)
}
2.輸出
1.標頭檔案
// 檔名:calculator.h
#pragma once
#include
#include
#include
#include
#include
#include
class
calculator
;
2.原始檔// 檔名:calculator.cpp
#include
"calculator.h"
using
namespace std;
calculator::
calculator()
void calculator::
login
(char oper,
int priory,
double
(*func)
(double
,double))
void calculator::
logout
(char oper)
double calculator::
operator()
(const string& expr)
double calculator::
calculate
(const vector
& postfix)
else
}return nums.
top();
}vector calculator::
topostfix
(const string& expr)if(
!num.
empty()
)if(c ==
'(')
if(c ==
')')
if(opers.
empty()
)throw
runtime_error
("bracket mismatch");
else opers.
pop();
continue;}
auto
it(oper_priorities.
find
(c));if
(it != oper_priorities.
end())
opers.
push
(c);
continue;}
throw
runtime_error
(string
("unknow char: "
)+ c);}
if(!num.
empty()
) postfix.
push_back
(num)
;while
(!opers.
empty()
&& opers.
top()!=
'(')if(
!opers.
empty()
)throw
runtime_error
("bracket mismatch");
return postfix;
}double calculator::
add(
double a,
double b)
double calculator::
sub(
double a,
double b)
double calculator::
mul(
double a,
double b)
double calculator::
div(
double a,
double b)
double calculator::
mod(
double a,
double b)
double calculator::
pow(
double a,
double b)
6 1 2 自定義運算子
6.1.2 自定義運算子 定義自定義的運算子的方式類似於函式,使用 let 繫結。它們可以使用任何字元,可以是通常的 f 數 算符 或者是邏輯運算子 還可以是其他字元 宣告乙個運算子,要把它的名字括在括號中,這是與通常的 let 繫結的唯一區別。使用星號時要小心,因為,用於 f 多行注釋的開始。在這...
6 1 2 自定義運算子
6.1.2 自定義運算子 定義自定義的運算子的方式類似於函式,使用 let 繫結。它們可以使用任何字元,可以是通常的 f 數 算符 或者是邏輯運算子 還可以是其他字元 宣告乙個運算子,要把它的名字括在括號中,這是與通常的 let 繫結的唯一區別。使用星號時要小心,因為,用於 f 多行注釋的開始。在這...
scala自定義運算子
通過隱式轉換來實現自定義運算子 案例 定義運算子 使得num1 num2可以獲取到對偶,兩個元素分別為 的結果和 的結果 當然,這個 運算子在bigint中已經實現了,這裡在int中將其實現一次 當使用int呼叫乙個int中不存在的方法的時候,就會來這個類中尋找該方法 implicit class ...