C C 支援括號和自定義運算子的表示式計算器

2021-10-25 05:17:04 字數 2567 閱讀 7214

簡單的表示式計算器,輸入乙個字串給出計算結果,數字支援小數,符號支援括號「()」和自定義雙目運算子(單字元),預定義了+,-,*,/,%,^六種運算子。原理就是中綴表示式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 ...