资源简介
本代码基于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 << 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\.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++标准程序库.
评论
共有 条评论