21xrx.com
2024-11-22 11:39:11 Friday
登录
文章检索 我的文章 写文章
C++实现前缀表达式求解
2023-07-05 05:15:43 深夜i     --     --
C++ 前缀表达式 求解

前缀表达式是一种算术表达式,其中运算符位于其运算数之前。例如,+ 3 4是一个前缀表达式,其等价于中缀表达式3 + 4。

在C++中,实现前缀表达式求解可以分为以下几个步骤:

1. 读取前缀表达式

在C++中,可以使用cin输入流来读取前缀表达式。读取时,需要将表达式按空格分割为运算符和运算数,并将它们存储在一个数组或链表中。

2. 转换为中缀表达式

为了方便求解,需要将前缀表达式转换为中缀表达式。可以使用栈来实现转换。从右至左扫描前缀表达式,如果遇到一个运算数,则将它压入栈中;如果遇到一个运算符,需要从栈中弹出两个运算数进行运算,并将结果压入栈中,直到扫描完整个表达式。

3. 求解中缀表达式

将中缀表达式求解的过程与前缀表达式相同,只是读取的顺序不同。可以使用栈来实现求解。从左至右扫描中缀表达式,如果遇到一个运算数,则将它压入栈中;如果遇到一个运算符,需要从栈中弹出两个运算数进行运算,并将结果压入栈中,直到扫描完整个表达式。

4. 输出结果

最后将求解的结果输出即可。

下面是一个简单的C++代码示例:

#include

#include

#include

#include

using namespace std;

int evaluate(string expr) {

  stack s;

  istringstream iss(expr);

  string token;

  while (iss >> token) {

    if (token == "+" || token == "-" || token == "*" || token == "/") {

      int op2 = s.top(); s.pop();

      int op1 = s.top(); s.pop();

      if (token == "+") s.push(op1 + op2);

      else if (token == "-") s.push(op1 - op2);

      else if (token == "*") s.push(op1 * op2);

      else s.push(op1 / op2);

    } else {

      s.push(stoi(token));

    }

  }

  return s.top();

}

int main() {

  string expr;

  getline(cin, expr);

  cout << evaluate(expr) << endl;

  return 0;

}

在本示例中,evaluate函数实现了将前缀字符串表达式转换为中缀表达式并求解其结果的功能。程序首先读取前缀表达式,然后调用evaluate函数求解其结果并输出。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复