中缀试转后缀试及前缀试并计算其结果
计算 结果 前缀 后缀 中缀
2023-09-14 08:57:54 时间
/* 参考大神nb的代码,感觉思路不错!终于搞明白了!一开始不明白在计算表达式的时候,利用栈到底做了什么!现在感觉我们利用栈就是模拟我们书面上计算表达式, 将优先级高的运算先计算出来,然后放进栈中,等待下一次的计算 #include iostream #include string #include stack #include cstdio using namespace std; class node public: double ret; string prefix, suffix;//前缀表达式和后缀表达式 node() ret=0; prefix=suffix=""; stack node optd;//操作数栈 stack char optr;//操作符栈 char formula[1000];//表达式以"=" 结束 int cmp(char ch)//定义符号的优先级 switch(ch) case #: return -2; case =: return -1; case +: case -: return 1; case *: case /: return 2; case (: return 3; case ): return 0; return -2; double deal(double x, char ch, double y) switch(ch) case +: return x+y; case -: return x-y; case *: return x*y; case /: return x/y; return 0.0; void cal() int i=0, n; node num, aTmp, bTmp; while(optr.top()!==) if(formula[i] =0 formula[i] =9) sscanf(formula+i, "%lf%n", num.ret, num.prefix.assign(formula+i, n); num.suffix.assign(formula+i, n); i+=n; optd.push(num); else if(optr.top()==( formula[i]==))//消除一对括弧 optr.pop(); ++i; if(cmp(formula[i]) cmp(optr.top()) || optr.top()==()//当前运算符大于栈顶运算符直接进栈 optr.push(formula[i]); ++i; else char ch=optr.top(), preTmp[]={ch, , \0}, sufTmp[]={ , ch, \0} ; optr.pop();//弹出一个栈顶操作符 bTmp=optd.top(); optd.pop();//得到第二个操作数 aTmp=optd.top(); optd.pop();//得到第一个操作数 aTmp.ret=deal(aTmp.ret, ch, bTmp.ret); aTmp.suffix+=" " + bTmp.suffix + sufTmp;//得到运算后的后缀式子 aTmp.prefix=preTmp + aTmp.prefix + " " + bTmp.prefix;//得到运算前的后缀式子 optd.push(aTmp);//不要忘记将计算的结果放入栈中 optr.pop();//别忘记弹出栈顶上的= int main() optr.push(#);//初始化栈顶操作符是‘#’ while(cin formula) cal(); node ans=optd.top(); optd.pop(); cout "表达式结果:" ans.ret endl "前缀试:" ans.prefix+= endl "后缀试:" ans.suffix+= endl; return 0; }
单词替换,现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。 给定一个字符串 aa,请你按照下面的要求输出字符串 bb。 给定字符串 aa 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 bb 的第一个字符; 给定字符串 aa 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 bb 的第二个字符;
相关文章
- 云计算实践之道——读后感
- 用PostgreSQL支持含有更新,删除,插入的实时流式计算
- 关于 大数据+实时计算 的题外话
- 解密函数计算异步任务能力之「任务的状态及生命周期管理」
- 从零入门 Serverless | 一文搞懂函数计算及其工作原理
- 函数计算自动化运维实战 2 -- 事件触发 eip 自动转移
- C/C++基础讲解(三十六)之数值计算与趣味数学篇(数字移动与多项式乘法)
- Open3D 计算点云的倒角距离(Chamfer Distance)
- Open3D 计算点云的面状指数
- Open3D(C++) 计算点云的形心
- 流式计算框架Storm网站访问来源实时统计及存储到redis代码示例
- 流式计算框架Storm 编程案例部署Linux结果演示及pom依赖
- CV之Hog+HamMingDistance:基于Hog提取和汉明距离对比实现计算图像相似度案例—for循环将多个成对图片依次对比并输出相似度
- 什么是基因测序,为什么需要云计算
- 习题6.14 以m行n列二维数组为参数进行方法调用,分别计算二维数组各列元素之和,返回并输出所计算的结果。
- 卷积、矩阵乘积、高斯模糊滤波(降噪)、空域计算(2D卷积计算)、频域计算(FFT)的理解
- ceph InfoLocker WORM时钟 WORM属性 WORM日志 WORM 计算文件过期时间 WORM文件状态
- 【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
- 【SQL开发实战技巧】系列(十六):数据仓库中时间类型操作(初级)日、月、年、时、分、秒之差及时间间隔计算
- Lucene in action 笔记 term vector——针对特定field建立的词频向量空间,不存!不会!影响搜索,其作用是告诉我们搜索结果是“如何”匹配的,用以提供高亮、计算相似度,在VSM模型中评分计算
- 【C】 计算球体积
- 04-计算属性
- 用补码计算x+y,并判断结果是否溢出问题
- Java8时间间隔计算Period.between与LocalDate.until区别&LocalDate,LocalDateTime计算两个时间的相差时间