最近嘗試做了乙個簡易計算器,特來分享一下。
支援連續的表示式,括號,負數,小數。
使用常規解法,先算最裡面的括號,先乘除在加減。
對於乙個不含括號的表示式,就是多個乘除式的相加,
如:a*b+b*c/d-e
先計算各乘除式的和,再將結果相加減,得到該式結果替換到原始表示式,
如此遞迴直到不含括號為止,再次計算即可得到最終結果
// demo.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include
#include
#include
#include
#include
using
namespace std;
/*分割字串
*/vector
c_split
(const
char
* in,
const
char
* delim)
;return vector;}
/*計算連續乘除式
*/double
fun1
(string str)}if
((operators.
empty()
))double result =
atof
(nums.at(
0).data()
);for(
int i =
0; i < operators.
size()
; i++
)else
}return result;}/*
計算連續加減式
*/double
fun2
(string str)
} nums.
push_back
(str.
substr
(p,str.
size()
-1))
;if((operators.
empty()
))double result =
fun1
(nums.at(
0));
for(
int i =
0; i < operators.
size()
; i++
)else
}return result;}/*
遞迴去除括號
檢測最內部的括號,傳入fun2進行加減計算
*/string fun
(string str)
}for
(int i = p; i < str.
size()
; i++)}
if(p ==
0&&q==0)
string stepstr = str.
substr
(p +
1, q - p -1)
;double stepresult =
fun2
(stepstr)
; string str1 = str.
substr(0
, p)
; string str2 = str.
substr
(q +
1, str.
size()
-(q +1)
);ostringstream mstream;
mstream << str1 <<
to_string
(stepresult)
<< str2;
return
fun(mstream.
str())
;}intmain
(int argc,
char
* ar**)
}
csdn
github位址
命令列 計算器
using system using system.collections.generic using system.text namespace calc console.writeline 請再次輸入乙個數字。ls s console.readline trim li s convert.toi...
linux命令列計算器
下面總結linux下的三個命令,來介紹一下linux下的計算方法 1 bc bc在預設的情況下是個互動式的指 令。在bc工作環境下,可以使用以下計算符號 加法 減法 乘法 除法 指數 餘數 一行輸入多個計算,用 相隔 quit 退出 scale 3 設小數字 不進行互動而直接計算出結果 echo s...
linux BC命令列計算器
1.基本使用 bc 5 4 20 bc 5 4 9 bc 5 4 1或者 echo 5 4 bc 20 echo 5 4 bc 9 echo 5 4 bc 1 也能夠把算式寫到檔案中面。然後一次計算。cat calcfile 5 56 7 bc calcfile 1013也能夠使用here 命令 b...