0

我正在寻找使用递归解析前缀表达式的代码。主要是 C++,但也可以是其他语言,我会翻译。谢谢。

4

1 回答 1

1

自己做真的很容易(你只需要一个操作员的堆栈(有时/可选地它的第一个术语))。

但如果你真的不想做太多工作,这里有一个链接:

前缀符号字符串到 int 的转换

如果您需要使用递归,则基本上将函数中的局部变量用作堆栈中的单个元素。

例如。伪 C++ 代码如下:

int naughtyglobalendindex = 0;
int parse(string str) {

  if (/* str starts off with an integer */) return the integer;

  char operator;
  operator = ?? // you will need to get the first op here. Maybe sscanf(str,"%c",&operator) or similar

  // get first argument
  int first = parse(/* str with 1st operator removed */);
  // get 2nd integer argument
  int second = parse(/* str - get substring from naughtyglobalendindex to end*/)

  // return first operator second <- this is pseudocode
  // in effect you want a switch clause
  switch (operator) {
    case '+': return first + second;
    case '-': return first - second; // and so on
  }
}

您可以将伪代码转换为实际的 C++,如果需要,可以修复全局naughtyglobalendindex变量。

于 2012-08-19T00:01:49.903 回答