版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 最近频繁解决计算方面的问题,其中就有实现字符串表达式计算返回结果值需求,通过使用栈实现,需要定义运算符号优先级,其它就不细说,代码如下:csStack.cs:using System;namespace PYHB / <summary> / 栈堆设定。 / 日期:2005-05-17 / </summary> public class clsStack private long Top; /栈
2、最大序号 private int MaxSize; / MaxSize 栈的容量 private string Element; public clsStack() / / TODO: 在此处添加构造函数逻辑 / Top=-1; / <summary> / 设定栈大最大容量
3、0;/ </summary> / <param name="Size"></param> public void Initialize(int Size) MaxSize=Size; Element=new stringSize; / <summary> / 入栈 / </summary>
4、160; / <param name="strItem"></param> public void Push(string strItem) if(!IsFull() Top=Top+1; ElementTop = strItem;
5、; / <summary> / 出栈 / </summary> / <returns></returns> public string Pop() string strRtn=" " if(!IsEmptly() strRtn = ElementTop;
6、60; Top=Top-1; return strRtn; public string GetTop() string strRtn=" " if(!IsEmptly() strRtn = ElementTop;
7、0; return strRtn; public bool IsFull() bool IsFull=Top=(MaxSize-1)?true:false; return IsFull; public void MakeEmptly() Top = -1; public boo
8、l IsEmptly() bool IsEmptly=Top=-1?true:false; return IsEmptly; calculate.csusing System;using System.Text;using System.Windows.Forms;namespace PYHB / <summary> / 字符串表达式计算实现,返回计算结果字符数组 / 日期:2005-05-17 / <
9、;/summary> public class Calculate private clsStack S=new clsStack(); public Calculate() / / TODO: 在此处添加构造函数逻辑 / / <summary> / 根据数字表达式字符串数
10、组,返回计算结果字符数组 / </summary> / <param name="strSoure">strSour 中缀表达式字符串,头部没有“#”,尾部需要加上“#”</param> / <returns>计算结果</returns> public string Run(string strSoure) if(strSoure=null)
11、60; return null; string dRtn=new stringstrSoure.Length; for(int k=0;k<strSoure.Length;k+) string ATemp; string strRPN; strRPN=GetRPN(st
12、rSourek); try ATemp=strRPN.Trim().Split(' '); for(int i=0;i<ATemp.Length;i+) if(sysFun.IsNumber(ATempi)
13、0; S.Push(ATempi); else DoOperate(ATempi); dRtnk=S.Pop(); catch
14、160; return dRtn; / <summary> / Run 返回后缀表达式 / strSour 中缀表达式字符串,头部没有“#”,尾部需要加上“#” / String 后缀表达式字符串,头尾都没有“#” / </summary> / <param name="strSource"></p
15、aram> / <returns></returns> private string GetRPN(string strSource) string ATemp; string strRPN="",Y; ATemp=strSource.Trim().Split(' '); S.Initialize(ATemp.Length);&
16、#160; S.MakeEmptly(); S.Push("#"); try for(int k=0;k<ATemp.Length;k+) /数字 if(sysFun.IsNumber(ATempk) &
17、#160; strRPN += " "+ATempk; /字符 else if(ATempk=")")
18、0; do Y=S.Pop(); if(Y!="(") strRPN += " "+Y;
19、 while(Y.Trim()!="("); else do
20、; Y = S.Pop(); if (GetISP(Y) > GetICP(ATempk) strRPN += " "+Y;
21、; while(GetISP(Y) > GetICP(ATempk); S.Push(Y); S.Push(ATempk); do
22、160; Y=S.Pop(); if(Y!="#") strRPN+=" "+Y; while(Y!="#"); catch return strRPN;&
23、#160; #region 运算符优先级定义 private enum isp s35 = 0, s40 = 1, s94 = 7, s42 = 5, s47 = 5, s37 = 5, s43 = 3, s45 = 3, &
24、#160;s41 = 8 private enum icp s35 = 0, s40 = 8, s94 = 6, s42 = 4, s47 = 4, s37 = 4, s43 = 2, s45 = 2, s41 = 1
25、60; private int GetISP(string a1) Encoding ascii =Encoding.ASCII; byte a=ascii.GetBytes(a1); switch(Convert.ToInt32(a0) case 35: return (int)isp.s35;&
26、#160; case 40: return (int)isp.s40; case 94: return (int)isp.s94; case 42: return (int)isp
27、.s42; case 47: return (int)isp.s47; case 37: return (int)isp.s37; case 43:
28、60; return (int)isp.s43; case 45: return (int)isp.s45; case 41: return (int)isp.s41; default:
29、60; return (int)isp.s35; private int GetICP(string a1) Encoding ascii =Encoding.ASCII; byte a=ascii.GetBytes(a1); switch(Convert.ToInt32(a0)
30、60; case 35: return (int)icp.s35; case 40: return (int)icp.s40; case 94: return (int
31、)isp.s94; case 42: return (int)icp.s42; case 47: return (int)icp.s47; case 37:
32、; return (int)icp.s37; case 43: return (int)icp.s43; case 45: return (int)icp.s45; &
33、#160; case 41: return (int)icp.s41; default: return (int)icp.s35; #endregion / <summary> /
34、判断是否存在左右数字,并且复制 / </summary> / <param name="dLeft">左数值</param> / <param name="dRight">右的数值</param> / <returns>是否成功</returns> private bool GetTwoItem(ref decimal dLeft,ref decimal dRig
35、ht) bool bRtn=true; try if(S.IsEmptly() return false; else dRight = Convert.ToDecimal(S.Pop(); if(S.IsEmptly(
36、) return false; else dLeft = Convert.ToDecimal(S.Pop(); catch return bRtn; / <summary> / 根据运算符号计算,并且把计算结果以字符形式填充入栈 / </summary>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年1月江苏扬州市机关生活服务中心招聘厨师2人考试参考试题及答案解析
- 首都医科大学附属北京回龙观医院派遣人员招聘5人考试参考试题及答案解析
- 2026广西柳州市融安县招聘城镇公益性岗位人员30人考试备考试题及答案解析
- 2026青海西宁市妇幼保健计划生育服务中心招聘6人考试备考试题及答案解析
- 2026辽宁鞍山市海城市融媒体中心公益性岗位招聘2人考试参考试题及答案解析
- 2026山西忻州市五寨县廉洁征兵考试参考题库及答案解析
- 2026青海智特安全环境技术服务有限公司招聘技术员6人考试备考试题及答案解析
- 2026年黄山学院师资博士后招聘11名笔试模拟试题及答案解析
- 2026上海复旦大学附属肿瘤医院泌尿外科大学科团队招聘考试参考试题及答案解析
- 2026贵州毕节市财政局选聘监管企业兼职外部董事考试参考试题及答案解析
- 安全技术与管理毕业论文
- 2025年新疆中考数学真题试卷及答案
- 温岭市恩力天金属表面处理有限公司年处理10万吨磷化金属表面技改项目环评报告
- 职务侵占罪法律培训
- 【2025版】人教版(PEP)三年级下册英语教学工作计划(及进度表)
- 劳动仲裁申请书电子版模板
- JJF 1183-2025 温度变送器校准规范
- 2024“五史”全文课件
- 家用燃气灶结构、工作原理、配件介绍、常见故障处理
- 人教版七年级数学上册期末试题及参考答案(偏难)
- 关节挛缩的治疗及预防
评论
0/150
提交评论