資源簡介
本代碼基于vs2017下開發(fā)的c++代碼,代碼主要使用逆波蘭算法構(gòu)建四則運(yùn)算框架,從而實(shí)現(xiàn)計算器程序的構(gòu)建,此外代碼中還加入了三角函數(shù),反三角函數(shù)等函數(shù)的處理,并且做了表達(dá)式的正確性檢驗(yàn),可以作為數(shù)據(jù)結(jié)構(gòu)以及算法學(xué)習(xí)的參考例程。
代碼片段和文件信息
#include?“calculator.h“
/*
程序思路:
(1)從標(biāo)準(zhǔn)輸入(控制臺,鍵盤)獲取原始表達(dá)式
(2)將原始表達(dá)式中包含sin(x)cos(x)等的部分計算出,并準(zhǔn)換成:(結(jié)果)的形式
------其中括號()是避免函數(shù)的計算結(jié)果為-的情況,從而使表達(dá)式滿足只包含運(yùn)算符和4則運(yùn)算
(3)‘-’符號前添加0處理,使表達(dá)式便于逆波蘭法計算
(4)對于(2)(3)處理后的表達(dá)式進(jìn)行中綴表達(dá)式合理性驗(yàn)證
(5)中綴表達(dá)式轉(zhuǎn)化成后綴表達(dá)式
(6)計算后綴表達(dá)式
*/
/////代碼中數(shù)據(jù)的定義和內(nèi)存分配可能還不是最優(yōu),有待優(yōu)化
/////////////////構(gòu)造函數(shù)+析構(gòu)函數(shù)///////////////////////////////
calculator::calculator()
{
}
calculator::~calculator()
{
}
///////////////將字符串轉(zhuǎn)換成浮點(diǎn)型數(shù)/////////////////////////////
double?calculator::?str2num(std::string?str?)
{
double?num?;
std::stringstream?ss;
ss?< ss?>>?num;
return?num;
}
////////////////將浮點(diǎn)型轉(zhuǎn)換成字符串//////////////////////////////
std::string?calculator::num2str(double?num)
{
std::string?str;
std::stringstream?ss;
ss?< ss?>>?str;
return?str?;
}
//////////////////需要對字符串進(jìn)行判斷///////////////////////
//////////////////判斷某字符串是不是數(shù)字///////////////////
bool?calculator::isDouble(std::string?s1)
{
///////////////////字符串合理性判斷,保證it有效
if?(s1.empty())
{
return?false;
}
else?if?(*s1.begin()?==?‘-‘?&&?s1.size()?2)
{
return?false;
}
auto?it?=?s1.begin();
if?(*it?==?‘-‘)??++it;
size_t?doutNum?=?0;
for?(;?it?!=?s1.end();?it++)
{
char?temp?=?*it;
if?(temp?!=?‘.‘?&&?(!(temp?>=?‘0‘?&&?temp?<=?‘9‘)))
{
return?false;
}
else?if?(temp?==?‘.‘)
{
++doutNum;
}
}
if?(doutNum?>?1)
{
return?false;
}
return?true;
}
///////////////將sin(x)等的數(shù)字字符轉(zhuǎn)化成數(shù)字字符//////////////
std::string?calculator::function2str(std::string?in)
{
std::string?out;
out.push_back(‘(‘);??//加上括號方便處理
auto?it?=?in.begin();
switch?(*in.begin())
{
case?‘p‘:?????//pow(xy)函數(shù)
for?(it?=?in.begin();?it?!=?in.end();?it++)
if?(*it?==?‘‘)??break;
double?n1?n2;
n1?=?str2num(std::string(in.begin()?+?4?it));
n2?=?str2num(std::string(it?+?1?in.end()));
out?=?out?+?num2str(pow(n1?n2));
break;
case?‘a(chǎn)‘:
if?(*(in.begin()?+?1)?==?‘s‘)???????//asin(x)函數(shù)
{
out?=?out?+?num2str(asin(str2num(std::string(in.begin()?+?5?in.end()))));
}
else?if?(*(in.begin()?+?1)?==?‘c‘)??//acos(x)函數(shù)
{
out?=?out?+?num2str(acos(str2num(std::string(in.begin()?+?5?in.end()))));
}
else????????????????????????????????//atan(x)函數(shù)
{
out?=?out?+?num2str(atan(str2num(std::string(in.begin()?+?5?in.end()))));
}
break;
case?‘s‘:???????????????????????????????//sin(x)
out?=?out?+?num2str(sin(str2num(std::string(in.begin()?+?4?in.end()))));
break;
case?‘c‘:???????????????????????????????//cos(x)
out?=?out?+?num2str(cos(str2num(std::string(in.begin()?+?4?in.end()))));
break;
case?‘t‘:???????????????????????????????//tan(x)
out?=?out?+?num2str(tan(str2num(std::string(in.begin()?+?4?in.end()))));
break;
}
out.push_back(‘)‘);??//加上括號方便處理
return?out;
}
/////////////////將原始表達(dá)式中的函數(shù)函數(shù)替換成數(shù)字字符串//////////////////
std::string?calculator::FunctionPro(std::string?s1)
{
if?(!s1.empty())
{
std::vector?spot
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????33792??2019-03-03?11:19??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\.suo
?????文件????6758400??2019-03-03?11:19??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\Browse.VC.db
?????文件???39190528??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch\AutoPCH\e07e6daa9560a048\CALCULATOR.ipch
?????文件???50135040??2019-03-03?11:19??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch\AutoPCH\e7f1e09324e3207\MAIN.ipch
?????文件??????13695??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\calculator.cpp
?????文件???????1231??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\calculator.h
?????文件???????6065??2019-02-21?20:02??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\calculator.vcxproj
?????文件???????1166??2019-02-21?20:02??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\calculator.vcxproj.filters
?????文件????????165??2019-02-21?19:42??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\calculator.vcxproj.user
?????文件????????674??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.log
?????文件?????820360??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.obj
?????文件????????239??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\calculator.lastbuildstate
?????文件???????1446??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\CL.command.1.tlog
?????文件??????41918??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\CL.read.1.tlog
?????文件???????1502??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\CL.write.1.tlog
?????文件???????2690??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\li
?????文件???????3876??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\li
?????文件????????734??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\calculator.tlog\li
?????文件??????74982??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\main.obj
?????文件?????265216??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\vc141.idb
?????文件?????806912??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\Debug\vc141.pdb
?????文件????????599??2019-03-03?11:19??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator\main.cpp
?????文件???????1444??2019-02-21?19:42??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\calculator.sln
?????文件?????245760??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\Debug\calculator.exe
?????文件????6032200??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\Debug\calculator.ilk
?????文件????1937408??2019-03-03?11:18??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\Debug\calculator.pdb
?????目錄??????????0??2019-03-03?11:10??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch\AutoPCH\e07e6daa9560a048
?????目錄??????????0??2019-03-03?11:19??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch\AutoPCH\e7f1e09324e3207
?????目錄??????????0??2019-02-21?20:00??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch\AutoPCH
?????目錄??????????0??2019-02-21?19:42??數(shù)據(jù)結(jié)構(gòu)編程小練\calculator\.vs\calculator\v15\ipch
............此處省略12個文件信息
評論
共有 條評論