-3

我想在后缀表示法中使用以下表达式的帮助,例如“4 5.2 + 5.7 / 6.1 5--”。

首先,它必须读取表达式,然后测试运算符和操作数,然后计算表达式。最后,“document.write”每次推送和弹出都在单独的行中。请帮助,因为我已经用完了从 YouTube 到这个网站的地方。我什至不知道从哪里开始,所以一个非常简单的例子可以帮助我开始。我有一些 JS 知识,但并不精通,对于这个特定的示例,我在其他地方几乎找不到帮助。

4

1 回答 1

0

考虑将问题分解为更简单的步骤。例如,您给出的原始问题陈述,用于评估字符串

4 5.2 + 5.7 / 6.1 5 - -

一次做所有事情太难了。最好将问题分解为可管理的部分。一种分解是:

  1. 将字符串分解为标记。

  2. 开发一个处理令牌的解释器。

这种分解是解决这类问题的标准方法。像PLAI这样的书涵盖了如何做第2部分。第2部分并不难:保持一堆数字。当你走令牌时:

  1. 如果您看到一个数字,请将其压入堆栈。

  2. 如果你看到一个运算符,将两个数字从堆栈中弹出,用运算符对其进行操作,然后将结果推回堆栈。

此过程是逆波兰表示法 ( RPN ) 计算器的核心。

如果您愿意使用正则表达式等工具,第一个问题也不会太难。正则表达式可以检测字符串中的模式并将字符串分成几段。例如,以下示例显示了我们如何将字符串沿空间边界拆分为一系列单词:

var s = "hello this is a test";
var pieces = s.split(" ");

出于您的目的,您的字符串不会总是很好地间隔开,因此您需要沿数字和运算符边界进行拆分。您需要尝试正则表达式模式,以使标记化按您希望的方式工作。


您要解决的问题实际上不是初学者材料。这个问题是给计算机科学第二学期的学生的,他们已经完成了诸如如何设计程序或其他类似课程之类的课程,并假设学生已经了解他们最喜欢的编程语言。如果你不能在不复制和粘贴别人的例子的情况下编写程序,那么你还没有做这个问题的背景。先做简单的问题,掌握语言,然后再回到这个问题上。

于 2012-10-01T18:02:14.953 回答