我正在寻找使用递归解析前缀表达式的代码。主要是 C++,但也可以是其他语言,我会翻译。谢谢。
问问题
2628 次
1 回答
1
自己做真的很容易(你只需要一个操作员的堆栈(有时/可选地它的第一个术语))。
但如果你真的不想做太多工作,这里有一个链接:
如果您需要使用递归,则基本上将函数中的局部变量用作堆栈中的单个元素。
例如。伪 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 回答