21xrx.com
2024-12-22 23:17:12 Sunday
登录
文章检索 我的文章 写文章
C++实现前缀表达式计算
2023-07-01 20:34:05 深夜i     --     --
C++ 前缀表达式 计算

C++是一种强大的编程语言,它支持各种数据类型和数学运算,使得实现前缀表达式计算变得非常容易。前缀表达式是一种数学表示法,其中运算符位于操作数之前。例如,“+ 2 3”表示加上2和3。

为了实现前缀表达式计算,我们需要首先将输入的前缀表达式转换为其等效的后缀表达式。这可以通过使用栈来完成。具体来说,我们可以遍历前缀表达式中的每个运算符和操作数,并将它们压入栈中。每当遇到一个运算符时,我们从栈中弹出两个操作数,并使用该运算符计算它们,然后将结果压回栈中。最后,栈中只剩下一个元素,即为计算结果。

接下来,让我们看看如何将此过程转换为C++代码。首先,我们需要定义一个表示栈的数据结构。我们可以使用C++中的vector来模拟栈的行为,如下所示:


#include <iostream>

#include <vector>

using namespace std;

template <typename T>

class Stack {

private:

  vector<T> stack;

public:

  void push(T val) {

    stack.push_back(val);

  }

  T pop() {

    T val = stack.back();

    stack.pop_back();

    return val;

  }

  T peek() {

    return stack.back();

  }

  bool empty() {

    return stack.empty();

  }

};

现在,我们可以编写前缀表达式计算函数,该函数将从输入的字符串中读取前缀表达式,并返回计算结果。该函数的代码如下所示:


double evalPrefix(string str) {

  Stack<double> stack;

  int i = str.size() - 1; // 从右到左遍历字符串

  while (i >= 0) {

    if (isdigit(str[i])) { // 处理操作数

      double num = 0, multiplier = 1;

      while (i >= 0 && isdigit(str[i])) {

        num += (str[i] - '0') * multiplier;

        multiplier *= 10;

        i--;

      }

      stack.push(num);

    }

    else if (isspace(str[i])) // 跳过空格

      i--;

    

    else { // 处理运算符

      double op1 = stack.pop();

      double op2 = stack.pop();

      switch (str[i]) {

        case '+': stack.push(op1 + op2); break;

        case '-': stack.push(op1 - op2); break;

        case '*': stack.push(op1 * op2); break;

        case '/': stack.push(op1 / op2); break;

      }

      i--;

    }

  }

  return stack.pop(); // 返回计算结果

}

最后,让我们来测试一下我们的代码。我们可以使用以下代码来读取输入并调用evalPrefix函数:


int main() {

  string prefix;

  cout << "Enter prefix expression: ";

  getline(cin, prefix);

  double result = evalPrefix(prefix);

  cout << "Result = " << result << endl;

  return 0;

}

现在,我们就可以输入前缀表达式并计算它了!如果您想进一步挑战,请尝试实现用于计算后缀表达式的C++函数。祝你好运!

  
  

评论区

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