求程序设计思路

ylc3895_cn 2005-03-18 10:58:57

输入一行(或与之类似的): (3*(3+4)+5)*9
敲回车之后得出结果。
也就是把一句话翻译为运算式。
给我点思路就可以了,当然越多越好,越简单越好,越新越好。
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjyu88 2005-03-19
  • 打赏
  • 举报
回复
上面说得很好..顶下~~
sloriver 2005-03-19
  • 打赏
  • 举报
回复
还是看编译原理的书好一点
当然 The C+ + Programming Language Third Edition\patr 1\ch 6\A Desk Calculator(p107)
上面有,讲的很细
BillSmith 2005-03-19
  • 打赏
  • 举报
回复
比较根本的解决办法是词法分析和语法分析,生成语法树。然后再算。
Cassati 2005-03-19
  • 打赏
  • 举报
回复
栈,运算符的优先级比较~~
pcboyxhy 2005-03-18
  • 打赏
  • 举报
回复
把表达式化为逆波兰式,
主要是运算符的优先级问题,
然后求值。

一般用栈,
数据结构书一般都会讲这个问题的。

当然递归处理也是可以的。

把不带括号运算符的表达式看成 原子表达式 ,
把带有括号的表达式看成 复合表达式,

所有的符合表达式是 将原子表达式两端添加括号并在外面添加运算符构成。
对于任意一个原子表达式可以简单的计算,
对于复合表达式,
可以采取如下策略:
搜索最外层的括号,
如果括号存在,
就递归计算括号内部的表达式,
并把计算后的结果替换掉原来的括号内的内容(括号也同时删除),
如果括号不存在,
说明遇到了原子表达式,
直接求解。

直到整个表达式序列中只剩下结果为止。

比如
(3*(3+4)+5)*9
先找到(3*(3+4)+5)开始处理,

3*(3+4)+5
发现(3+4)
开始处理 3+4
原子表达式,直接求值得到7
将(3+4)替换成7,得到3*7+5
现在是原子表达式了,直接计算得到26
替换成 26*9
变成原子表达式了
直接计算,然后输出 。

对于原子表达式,可以按照规则计算,

从左往右扫描表达式,
遇到'+' '-'计算前面的连续的式子(如果存在)

遇到'*' '/' 直接计算



noauh 2005-03-18
  • 打赏
  • 举报
回复
<<C++程序设计语言>>有一章讲了这个问题.

要用栈操作.
ylc3895_cn 2005-03-18
  • 打赏
  • 举报
回复
楼上稍微具体点,太笼统了。
zhangfjj 2005-03-18
  • 打赏
  • 举报
回复
翻数据结构的书吧,好象要用队列还是栈!

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧