博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构实验 第二单元 构造计算器
阅读量:6655 次
发布时间:2019-06-25

本文共 4261 字,大约阅读时间需要 14 分钟。

首先自己百度下面两个名词

前缀表达式、后缀表达式

我们计算机 能直接计算的是后缀表达式。

前缀表达式:1+2*3+4    = 11

后缀表达式:1 2 3 *+4+ = 11

///         /// 将前缀表达式转换为后缀表达式        ///         ///         /// 
private string InfixToSuffix(string strInfix) { LinkStack ls = new LinkStack(); System.Text.StringBuilder sb = new StringBuilder(200); string str = strInfix.Trim(); foreach(var word in str) { if (char.IsNumber(word)) { sb.Append(word); } else { //非数字,先加个空格。 sb.Append(' '); if (word == '(') { ls.Push(word); } else if (word == ')') { while (!ls.Empty()) { char ch = (char)ls.Pop(); if (ch == '(') { break; } sb.Append(ch); } } else if (word == '+' || word == '-') { while(!ls.Empty()) { char ch = (char)ls.Top(); if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { sb.Append((char)ls.Pop()); } else if (ch == '(') { break; } } ls.Push(word); } else if (word == '*' || word == '/') { while (!ls.Empty()) { char ch = (char)ls.Top(); if (ch == '*' || ch == '/') { sb.Append((char)ls.Pop()); } else if (ch == '+' || ch == '-' || ch == '(') { break; } } ls.Push(word); } else { } } } while (!ls.Empty()) { sb.Append(ls.Pop()); } return sb.ToString(); }
下面是计算后缀表达式:

///         /// 计算后缀表达式        ///         ///         /// 
private int CalculateSuffix(string strSuffix) { LinkStack ls = new LinkStack(); int num=0; Boolean numState = false; foreach (var word in strSuffix) { if (char.IsNumber(word)) { numState = true; num = num*10+int.Parse(word.ToString()); } else { //将数入栈 if (numState == true) { ls.Push(num); num = 0; } numState=false; if (word != ' ') { //忽略空白 int num2 = (int)ls.Pop(), num1 = (int)ls.Pop(); switch(word) { case '+': ls.Push(num1 + num2); break; case '-': ls.Push(num1 - num2); break; case '*': ls.Push(num1 * num2); break; case '/': ls.Push(num1 / num2); break; } } } } return (int)ls.Pop(); }

转载于:https://www.cnblogs.com/tinyjian/p/6550708.html

你可能感兴趣的文章
Windows程序设计_13_伤不起的书
查看>>
一些命令
查看>>
STM32 f407 温湿度采集报警
查看>>
Android AChartEngine 饼图渐变效果
查看>>
python基本语法(持续更新)
查看>>
Java单例模式
查看>>
记录一个浏览器主页被篡改的解决方法
查看>>
Docker 常用命令 (持续更新)
查看>>
JAVA一个关于传递引用的测试
查看>>
洛谷P2219 [HAOI2007]修筑绿化带(单调队列)
查看>>
Atcoder Tenka1 Programmer Contest 2019题解
查看>>
GlusterFS 安装
查看>>
HDU 1907 John 与 poj 3480
查看>>
短信发送器
查看>>
循环次数( M - 暴力求解、打表)
查看>>
MyBatis错题解析
查看>>
linux===linux在线模拟器汇总
查看>>
poj 2985
查看>>
bzoj2039
查看>>
poj1637
查看>>