关于C#作业计算器的一个突发奇想
2014-04-07 01:59
225 查看
C#的计算器作业埋头做了大半天终于弄出了个大概,对于题目要求里面的那句“麻雀虽小五脏俱全”有很大的感触,叫一个同学作为第一个(估计也是最后一个)用户帮忙测试了下才发现BUG能有如此之多,应该说是自己没能想到的BUG是如此之多。一怒之下写了长篇大论去左修修右补补的,貌似终于出了个较为满意的结果。不过这两天跟同学讨论了一下才发现关于科学计算的那部分是能用堆栈完成的,聊着聊着才突然发现自己好像压根没想过用堆栈。
话不多说先把自己关于这道题的小构思说一下,就是在保证输入正确的情况下把整个算式(当然不包括等于号咯)作为字符串先存下来,然后通过加减乘除加以分隔以达到提取算式的各个数值的目的再进行计算,这样的方法在普通计算里面是可行的,但要考虑到乘除法和加减法的顺序后就不可行了。于是也不知道当时自己是怎么想的居然想到这么一个方法,如果要考虑到运算顺序的话,先用加减号把字符串隔开,这里用"1+2*3+5”做一个例子,就得到了"1" "2*3""5"这三个子字符串了,然后按顺序遍历这3个子字符串并对他们进行乘除号的分隔,就得到("1")("2""3")("5")这四个结果,那么程序就可以根据每个子字符串的长度判别用乘除号分隔后的子字符串是否为单个数值或者是带乘除后的算式,最后对带乘除号的算式进行计算并把结果返还到用加减号分隔的子字符串中,上例就得到"1""6""5",然后程序退出遍历,重新用加减法计算"1+6+5"便能得到"12"这个结果了。
相比用栈去存取算式无疑上述方法更为复杂,不过也算是自己做题时摸索出来的一种思路,觉得是一种可行的方法。
话不多说先把自己关于这道题的小构思说一下,就是在保证输入正确的情况下把整个算式(当然不包括等于号咯)作为字符串先存下来,然后通过加减乘除加以分隔以达到提取算式的各个数值的目的再进行计算,这样的方法在普通计算里面是可行的,但要考虑到乘除法和加减法的顺序后就不可行了。于是也不知道当时自己是怎么想的居然想到这么一个方法,如果要考虑到运算顺序的话,先用加减号把字符串隔开,这里用"1+2*3+5”做一个例子,就得到了"1" "2*3""5"这三个子字符串了,然后按顺序遍历这3个子字符串并对他们进行乘除号的分隔,就得到("1")("2""3")("5")这四个结果,那么程序就可以根据每个子字符串的长度判别用乘除号分隔后的子字符串是否为单个数值或者是带乘除后的算式,最后对带乘除号的算式进行计算并把结果返还到用加减号分隔的子字符串中,上例就得到"1""6""5",然后程序退出遍历,重新用加减法计算"1+6+5"便能得到"12"这个结果了。
相比用栈去存取算式无疑上述方法更为复杂,不过也算是自己做题时摸索出来的一种思路,觉得是一种可行的方法。
相关文章推荐
- 对不起,各位哥哥,我有一个问题向你们请教,请多多指教关于C#DataGrid的问题,特急!!!
- C#中关于静态与非静态的一个疑问
- 第三周作业,关于老师的一个问题给出了一点自己的想法
- 用C#自制了一个简易的计算器(并规定了其计算范围)
- .NET委托:一个关于C#的睡前故事
- 记录一个c#计算器程序
- C# 关于out关键字的用法(一个方法返回多个值的问题)
- 一个关于CallBack机制的实例(C#)
- 最近突发奇想想写一个C#速成教程
- asp.net2.0 C#关于农历转换的一个类
- 一个关于C#调用API的网站
- C#写的计数器控件 - 一个关于相对路径使用的问题
- .NET委托:一个关于C#的睡前故事
- 一个C#的学生成绩管理系统作业
- C#大作业一个简单的编辑器
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- C# 一步一步完成一个简单的计算器 第三步---实现双目运算
- C# 关于out关键字的用法(一个方法返回多个值的问题)
- 使用C#创建一个计算器
- 程序设计第七次作业——关于计算器的总结