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