展开全部
这涉及到一个技术:【表达式分析】
可以利用到栈数据结构来分析,也可以硬来,按人脑怎么算,你就怎么算。
如果你只是想解决这个问题,其中一个简单的思路是:
你要解决的问题实际是算出这样格式的字符串表达式的结果:
<number><op><number><op><number><op><number>...
<number>表示任意数.比如41,55,66234,-244
<op>表示任意运算符,比如+,-,*,/,%,^
把<op>按优先级排列。
先算完优先级高的,再算优先级低的。“5+2*3*1”的具体步骤是:
先算优先级高的2*3=6
用6替换掉2*3,
得到 "5+6*1"
再检测是否还有高优先级的*,有则
6*1=6,用"6"替换掉"6*1"
得到"5+6"
接着没有高优先级的运算符字符了,可以算低优先级字符
接着得到用"11"替换"5+6"。
如果你还需要其他更为精妙和复杂的方法,建议你分别搜索关键字:
“栈 表达式求值”
“编译原理 表达式求值”
“树 表达式求值”
因为表达式分析是一门复杂的技术,不仅仅是四则运算,还包括所有语言分析(包括伪自然语言分析)
可以利用到栈数据结构来分析,也可以硬来,按人脑怎么算,你就怎么算。
如果你只是想解决这个问题,其中一个简单的思路是:
你要解决的问题实际是算出这样格式的字符串表达式的结果:
<number><op><number><op><number><op><number>...
<number>表示任意数.比如41,55,66234,-244
<op>表示任意运算符,比如+,-,*,/,%,^
把<op>按优先级排列。
先算完优先级高的,再算优先级低的。“5+2*3*1”的具体步骤是:
先算优先级高的2*3=6
用6替换掉2*3,
得到 "5+6*1"
再检测是否还有高优先级的*,有则
6*1=6,用"6"替换掉"6*1"
得到"5+6"
接着没有高优先级的运算符字符了,可以算低优先级字符
接着得到用"11"替换"5+6"。
如果你还需要其他更为精妙和复杂的方法,建议你分别搜索关键字:
“栈 表达式求值”
“编译原理 表达式求值”
“树 表达式求值”
因为表达式分析是一门复杂的技术,不仅仅是四则运算,还包括所有语言分析(包括伪自然语言分析)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询