• 大小: 15.05MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-04
  • 语言: C/C++
  • 标签: vs2017  

资源简介

本代码基于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\link.command.1.tlog

     文件       3876  2019-03-03 11:18  数据结构编程小练\calculator\calculator\Debug\calculator.tlog\link.read.1.tlog

     文件        734  2019-03-03 11:18  数据结构编程小练\calculator\calculator\Debug\calculator.tlog\link.write.1.tlog

     文件      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个文件信息

评论

共有 条评论