算法 笔记]字符串表达式计算(简易版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:编写一个函数,计算字符串中表达式的值,参数中只包含计算符:+,-,*,/等。例如,str=”10+50+2*6/3”,result=64。

解析:

考虑算术表达式计算规则:

1.同优先级操作符之间,从左到右计算;

2.高优先级操作符的计算要早于低优先级操作符的计算;

3.加减操作符优先级低于乘除操作符优先级;

4.括号内的算术表达式的优先级高于括号外的乘除操作符的优先级。

调整后,操作符栈为:(op_stack,opr_top=1)

…+‟…*‟

当前,current_opr=‟*‟,top_opr=‟*‟,则priority(current_opr) == priority(top_opr),即符号第一种情况。

在编程中,对于“冒泡”处理有两种形式:

1. 首先将元素压入栈中,然后通过交换的形式来达到“冒泡”处理。

1for ( i = opr_top - 1; i > 0; --i )

2 {

3if ( priority(op_stack[i]) < priority(op_stack[i-1]) )

4 swap( op_stack, i, i - 1 );

5else

6break;

7 }

8

9for ( j = value_top - 1; j > i; --j )

10 {

11 swap( value_stack, j, j - 1 );

12 }

2. 不将数值压入栈中,而是首先查找符合要求的“位置”,然后将元素插入。

1for ( i = opr_top; i > 0; --i )

2 {

3if ( priority(op_stack[j-1]) > priority(current_opr) )

4 op_stack[j] = op_stack[j-1];

5else

6break;

7 }

8 op_stack[i] = current_opr;

9 ++opr_top;

10

11for ( j = value_top; j > i; --j )

12 {

13 value_stack[j] = value_stack[j - 1];

14 }

15 value_stack[j] = result;

16 ++value_top;

完整程序的源码:

ComputeExpression

简易版本不足之处:

1.不能计算括号表达式

2.对负数不能有效的处理

3.不能有效计算大数

4.对表达式中符号以及括号的合法性检查

相关文档
最新文档