基于vs2017开发的逆波兰算法下的计算器控制台程序,可用于数据结构学习练手
本代码基于vs2017下开发的c++代码,代码主要使用逆波兰算法构建四则运算框架,从而实现计算器程序的构建,此外代码中还加入了三角函数,反三角函数等函数的处理,并且做了表达式的正确性检验,可以作为数据结构以及算法学习的参考例程。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 33792 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15.suo
文件 6758400 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15Browse.VC.db
文件 39190528 2019-03-03 11:18 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe07e6daa9560a048CALCULATOR.ipch
文件 50135040 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe7f1e09324e3207MAIN.ipch
文件 13695 2019-03-03 11:18 数据结构编程小练calculatorcalculatorcalculator.cpp
文件 1231 2019-03-03 11:18 数据结构编程小练calculatorcalculatorcalculator.h
文件 6065 2019-02-21 20:02 数据结构编程小练calculatorcalculatorcalculator.vcxproj
文件 1166 2019-02-21 20:02 数据结构编程小练calculatorcalculatorcalculator.vcxproj.filters
文件 165 2019-02-21 19:42 数据结构编程小练calculatorcalculatorcalculator.vcxproj.user
文件 674 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.log
文件 820360 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.obj
文件 239 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogcalculator.lastbuildstate
文件 1446 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.command.1.tlog
文件 41918 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.read.1.tlog
文件 1502 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.write.1.tlog
文件 2690 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tloglink.command.1.tlog
文件 3876 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tloglink.read.1.tlog
文件 734 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tloglink.write.1.tlog
文件 74982 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugmain.obj
文件 265216 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugvc141.idb
文件 806912 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugvc141.pdb
文件 599 2019-03-03 11:19 数据结构编程小练calculatorcalculatormain.cpp
文件 1444 2019-02-21 19:42 数据结构编程小练calculatorcalculator.sln
文件 245760 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.exe
文件 6032200 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.ilk
文件 1937408 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.pdb
目录 0 2019-03-03 11:10 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe07e6daa9560a048
目录 0 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe7f1e09324e3207
目录 0 2019-02-21 20:00 数据结构编程小练calculator.vscalculatorv15ipchAutoPCH
目录 0 2019-02-21 19:42 数据结构编程小练calculator.vscalculatorv15ipch
............此处省略12个文件信息
#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 << str;
ss >> num;
return num;
}
////////////////将浮点型转换成字符串//////////////////////////////
std::string calculator::num2str(double num)
{
std::string str;
std::stringstream ss;
ss << num;
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.vscalculatorv15.suo
文件 6758400 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15Browse.VC.db
文件 39190528 2019-03-03 11:18 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe07e6daa9560a048CALCULATOR.ipch
文件 50135040 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe7f1e09324e3207MAIN.ipch
文件 13695 2019-03-03 11:18 数据结构编程小练calculatorcalculatorcalculator.cpp
文件 1231 2019-03-03 11:18 数据结构编程小练calculatorcalculatorcalculator.h
文件 6065 2019-02-21 20:02 数据结构编程小练calculatorcalculatorcalculator.vcxproj
文件 1166 2019-02-21 20:02 数据结构编程小练calculatorcalculatorcalculator.vcxproj.filters
文件 165 2019-02-21 19:42 数据结构编程小练calculatorcalculatorcalculator.vcxproj.user
文件 674 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.log
文件 820360 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.obj
文件 239 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogcalculator.lastbuildstate
文件 1446 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.command.1.tlog
文件 41918 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.read.1.tlog
文件 1502 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogCL.write.1.tlog
文件 2690 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogli
文件 3876 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogli
文件 734 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugcalculator.tlogli
文件 74982 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugmain.obj
文件 265216 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugvc141.idb
文件 806912 2019-03-03 11:18 数据结构编程小练calculatorcalculatorDebugvc141.pdb
文件 599 2019-03-03 11:19 数据结构编程小练calculatorcalculatormain.cpp
文件 1444 2019-02-21 19:42 数据结构编程小练calculatorcalculator.sln
文件 245760 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.exe
文件 6032200 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.ilk
文件 1937408 2019-03-03 11:18 数据结构编程小练calculatorDebugcalculator.pdb
目录 0 2019-03-03 11:10 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe07e6daa9560a048
目录 0 2019-03-03 11:19 数据结构编程小练calculator.vscalculatorv15ipchAutoPCHe7f1e09324e3207
目录 0 2019-02-21 20:00 数据结构编程小练calculator.vscalculatorv15ipchAutoPCH
目录 0 2019-02-21 19:42 数据结构编程小练calculator.vscalculatorv15ipch
............此处省略12个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)