-
大小: 2.14MB文件类型: .rar金币: 1下载: 0 次发布日期: 2023-08-12
- 语言: C/C++
- 标签: c++ mid_to_suffi
资源简介
这是一个运行于vs2015的项目,代码也就200+行,实现的功能有基础的四则运算以及math里面cos,sin,pow函数的,有这几个函数为样本添加其他函数也很简单,代码实现简单,中缀转后缀,只用了一个栈,附加提醒,若是使用函数,一定要加括号,如pow(1+2,sin(3+4))这样的可行。
代码片段和文件信息
#include“cal.h“
cal::cal(string ans)
{
str = ans;
}
cal::~cal()
{
}
int cal::compareNumber(char x)//用来比较符号的优先级
{
if (x == ‘#‘||x==‘(‘ || x == ‘‘)
return -1;
if (x == ‘+‘ || x == ‘-‘)
return 0;
if (x == ‘*‘ || x == ‘/‘)
return 1;
return 2;
}
void cal::change(string mid string suxfix)//中缀表达式转换为后缀表达式
{
int i = 0 len = mid.size() mid_index = 0;
char c;
stackintElements;// int数据集
intElements.push(‘#‘);// 特殊符号用来区分元素
while (i < len)
{
if (mid[i] == ‘(‘)
{
intElements.push(mid[i]);
i++;
}
else if (mid[i] == ‘)‘)
{
while (intElements.top() != ‘(‘)
{
suxfix+= intElements.top();
suxfix+= ‘ ‘;
intElements.pop();
}
intElements.pop();
i++;
}
else if (mid[i] == ‘‘)
{
while (intElements.top() != ‘(‘)
{
suxfix += intElements.top();
suxfix += ‘ ‘;
intElements.pop();
}
i++;
}
else if (mid[i] == ‘+‘ || mid[i] == ‘-‘ || mid[i] == ‘/‘ || mid[i] == ‘*‘)
{
while (compareNumber(intElements.top()) >= compareNumber(mid[i]))
{
suxfix+= intElements.top();
suxfix+= ‘ ‘;
intElements.pop();
}
intElements.push(mid[i]);
i++;
}
else if (mid[i] >= ‘0‘&&mid[i] <= ‘9‘)
{
while (mid[i] >= ‘0‘&&mid[i] <= ‘9‘)
{
suxfix+= mid[i];
i++;
}
suxfix+= ‘ ‘;
}
else if (mid[i] >= ‘a‘&&mid[i] <= ‘z‘)
{
string count;
for (; mid[i] != ‘(‘; i++)
count += mid[i];
if (count.compare(“sin“) == 0)
intElements.push(‘a‘);
else if (count.compare(“pow“) == 0)
intElements.push(‘b‘);
else if (count.compare(“cos“) == 0)
intElements.push(‘c‘);
}
else if(mid[i]==‘‘)
{
i++;
}
}
while (intElements.top() != ‘#‘) {
suxfix+= intElements.top();
suxfix+= ‘ ‘;
intElements.pop();
}
printf(“%lf“countSuxfix(suxfix));
}
double cal::countSuxfix(string suxfix)//计算后缀表达式 suxfix后缀表达式
{
int len = suxfix.size();
double x;
stack intElements;
int i = 0;
while (i if (suxfix[i] == ‘ ‘)// 用于表达式有效字符集用完跳出循环
{
i++;
continue;
}
switch (suxfix[i])
{
case ‘+‘:
x = intElements.top();//根据原理图看
intElements.pop();
x = intElements.top() + x;
intElements.pop(); i++;
break;
case ‘-‘:
x = intElements.top();
intElements.pop();
x = intElements.top() - x;
intElements.pop();
i++;
break;
case ‘*‘:
x = intElements.top();
intElements.pop();
x = intElements.top()*x;
intElements.pop();
i++;
break;
case ‘a‘:
x = intElements.top();
intElements.pop();
x = sin(x);
i++;
break;
case ‘b‘:
{
int a = intElements.top();
intElements.pop();
int b = intElements.top();
intElements.pop();
x = 1;
for (int i = 0; i < a; i++)
{
x *= b;
}
i++;
break;
}
case ‘c‘:
x = intElements.top();
intElements.pop();
x = cos(x);
i++;
break;
case ‘/‘:
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 35840 2019-01-16 18:01 Project1\.vs\Project1\v14\.suo
文件 118272 2019-01-16 17:41 Project1\Debug\Project1.exe
文件 685788 2019-01-16 17:41 Project1\Debug\Project1.ilk
文件 1134592 2019-01-16 17:41 Project1\Debug\Project1.pdb
文件 3437 2019-01-16 17:41 Project1\Project1\cal.cpp
文件 434 2019-01-16 11:52 Project1\Project1\cal.h
文件 346536 2019-01-16 17:41 Project1\Project1\Debug\cal.obj
文件 1086 2019-01-16 14:47 Project1\Project1\Debug\Project1.Build.CppClean.log
文件 716 2019-01-16 17:41 Project1\Project1\Debug\Project1.log
文件 1326 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\CL.command.1.tlog
文件 27078 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\CL.read.1.tlog
文件 2030 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\CL.write.1.tlog
文件 1530 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\li
文件 3520 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\li
文件 834 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\li
文件 228 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog\Project1.lastbuildstate
文件 486400 2019-01-16 17:41 Project1\Project1\Debug\vc140.idb
文件 471040 2019-01-16 17:41 Project1\Project1\Debug\vc140.pdb
文件 166206 2019-01-16 14:48 Project1\Project1\Debug\源.obj
文件 5807 2019-01-14 15:18 Project1\Project1\Project1.vcxproj
文件 1147 2019-01-14 15:18 Project1\Project1\Project1.vcxproj.filters
文件 192 2019-01-16 10:58 Project1\Project1\源.cpp
文件 1306 2019-01-14 14:09 Project1\Project1.sln
文件 8474624 2019-01-16 18:01 Project1\Project1.VC.db
目录 0 2019-01-14 14:09 Project1\.vs\Project1\v14
目录 0 2019-01-16 17:41 Project1\Project1\Debug\Project1.tlog
目录 0 2019-01-14 14:09 Project1\.vs\Project1
目录 0 2019-01-16 17:41 Project1\Project1\Debug
...D.H. 0 2019-01-14 14:09 Project1\.vs
目录 0 2019-01-16 14:53 Project1\Debug
............此处省略5个文件信息
相关资源
- VS2010 C++开发初学者开发源码
- c++QT5新版画任意阶贝塞尔曲线完整工
- Microsoft Visual C++ Runtime 64 bits
- 密码编码学:加密方法的C与C++实现
- Effective STL 中文版非扫描版
- c++实现魂斗罗游戏
- Visual c++ 2010 express 中文版
- 是男人就下一百层C++游戏源码
- MSVC编译器
- 航空管理系统源代码c++
- 清华郑莉C++讲稿
- VC++调用大漠插件按键精灵的方法及演
- c++ 并发编程实战 中文版+英文版
- C++ 多线程通信方式简介并结合生产者
- MFC/C++画柱状图及饼状图
- 书店租赁系统C++带SQL数据库
- NLopt-非线性规划的C/C++代码
- VC++多文档程序可新建文本编辑器和画
- easyx做的时钟
- MFC写的八皇后演示程序
- 用于人脸识别的lbp算法C++源码
- mfc工资管理系统.rar
- C++程序设计谭浩强100%完整高清版·清
- C++面向对象程序设计谭浩强 完整版
- C++进行图像预处理代码
- c++与Qt使用数据库MySQL进行数据的增删
- C++调用海康工业相机SDK采集图像的简
- 直线段的裁剪 vc++ MFC
- c++ mysql学生信息管理系统
- 双边滤波器C++ 代码
评论
共有 条评论