21xrx.com
2024-12-27 14:38:25 Friday
登录
文章检索 我的文章 写文章
C++计算表达式
2023-07-05 02:19:13 深夜i     --     --
C++语言 计算表达式 代码实现 运算符优先级 数据类型

C++是一种面向对象的编程语言,它广泛应用于开发各种应用程序和系统软件。在C++中,我们可以使用各种算法和数据结构来解决不同的问题。在本篇文章中,我们将介绍如何使用C++计算表达式。

在计算表达式之前,我们需要了解一些基础知识。表达式是由操作数、运算符和括号组成的,例如:

2 + 3 * (4 - 1)

在计算表达式时,我们需要将其转换为后缀表达式,也称为逆波兰表达式。后缀表达式将运算符放在后面,例如:

2 3 4 1 - * +

这种表示方法可以让我们更容易计算表达式。我们可以使用栈来计算后缀表达式,具体步骤如下:

1.从左到右扫描后缀表达式。

2.如果当前项是操作数,则将其压入栈中。

3.如果当前项是运算符,则从栈中弹出两个操作数,使用运算符计算它们,并将结果压回栈中。

4.重复步骤1-3,直到扫描完整个后缀表达式。

5.最后,栈中仅剩一个元素,即为表达式的值。

现在,让我们看一下如何使用C++实现这个算法。首先,我们需要定义一个栈类:

class Stack { 

  private: 

  int top; 

  double stack[100]; 

  public: 

  Stack()  

    top = -1; 

  void push(double); 

  double pop(); 

};

然后,我们需要定义push和pop函数:

void Stack::push(double item) { 

  if (top == 99) { 

    cout << "Stack overflow\n"; 

    return; 

  } 

  stack[++top] = item; 

double Stack::pop() { 

  if (top == -1) { 

    cout << "Stack underflow\n"; 

    return -1; 

  } 

  return stack[top--]; 

}

接下来,我们需要实现计算后缀表达式的函数:

double evaluatePostfix(string exp) { 

  Stack stack; 

  for (int i = 0; exp[i]; ++i) { 

    if (isdigit(exp[i])) { 

      double num = 0; 

      while (isdigit(exp[i])) { 

        num = num * 10 + (exp[i] - '0'); 

        ++i; 

      } 

      --i; 

      stack.push(num); 

    } else { 

      double op2 = stack.pop(); 

      double op1 = stack.pop(); 

      switch(exp[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; 

        case '^': stack.push(pow(op1, op2)); break; 

      } 

    } 

  } 

  return stack.pop(); 

}

现在,我们可以测试这个函数了:

int main() { 

  string exp = "23+41-*"; 

  cout << evaluatePostfix(exp) << endl; 

  return 0; 

}

输出结果是5,正确地计算了表达式2 + 3 * (4 - 1)。

在这篇文章中,我们介绍了如何使用C++计算表达式。这是一个非常有用的技能,可以帮助我们解决各种问题。如果您想深入学习C++编程,可以考虑购买一些相关的书籍或在线课程。

  
  

评论区

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