阿俊·铜须

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第一周的作业是完成小学生计算器,这个项目如果仅仅是一个数字的四则运算的话是一个很简单的问题。但是加入了随机生成表达式和分数计算的要求之后,难度就大大增加了。

最初的想法:

     首先面对这个问题,第一反应就是逆波兰表达式的求解变形,重载加减乘除的符号算法。随机生成表达式则是递归由里到外生成,括号随机添加

遇到的困难:

 (1) 由于加入了分数运算,存取数据的栈就要改成另外的可以表示分数的形式,我选择了采用字符串的形式,就涉及了大量的字符串的操作,字符串地址的传递。并且

   (2)  上述方法生成的表达式的括号总是嵌套的,不能出现括号并列的情况。

获得的经验:

    C++的栈操作存储的字符串总是以地址的形式保存,而不是内容。导致代码在某阶段总是存在栈保存的内容发生改变的问题,原因是栈指针指向的内存空间被后续的操作改变了值,因此后来采取了申请多个新的内存空间存储不同的字符串,保证了栈的内容不改变。

    由于分数中间计算的结果可能很大,导致在运行过程中总是容易容易出现数组溢出的情况,这种错误非常难以发现。

    模块化的代码调试,逐步缩小问题出现位置的范围。

posted on 2016-09-29 19:00  阿俊·铜须  阅读(111)  评论(1编辑  收藏  举报