21xrx.com
2025-04-14 20:23:18 Monday
文章检索 我的文章 写文章
C++表达式求值栈
2023-06-28 03:00:57 深夜i     17     0
C++ 表达式 求值

在C++中,我们经常需要对表达式进行求值,例如计算两个数字的和、差、积或商。为了实现这些计算过程,我们使用栈这个数据结构来储存和处理表达式中的各个元素。下面我们就来了解一下C++表达式求值栈。

栈是一种后进先出的数据结构,当我们对表达式进行求值时,我们需要将其中的数字和运算符分别压入栈中,并依次进行处理。当遇到优先级较高的运算符时,我们需要将之前的数字和运算符出栈,进行计算,并将计算结果再次压入栈中,直到整个表达式求值完成。

例如,对于表达式“5+3*2”,我们可以先将“5”和“+”分别压入栈中,接着遇到“3”的时候也将其压入栈中,再遇到“*”时,我们需要将“3”和“*”出栈进行计算,结果为6,再将“6”压入栈中。最终,对于整个表达式的计算结果为11,即“5+3*2=11”。

在C++中,我们可以使用STL中的stack容器来实现栈的操作。下面是一个简单的例子:

#include <iostream>
#include <stack>
using namespace std;
int main()
{
  stack<int> numStack;
  stack<char> opStack;
  string s = "5+3*2"//待求值的表达式
  for(int i = 0; i < s.length(); i++)
  {
    if(s[i] >= '0' && s[i] <= '9')
    {
      numStack.push(s[i] - '0');  //如果是数字,将其压入数字栈中
    }
    else if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
    {
      opStack.push(s[i]);  //如果是运算符,将其压入运算符栈中
    }
    else
    忽略不计
    
  }
  int result = numStack.top(); //从数字栈中取出第一个数字作为结果
  numStack.pop();  //将其出栈
  while(!opStack.empty())
  {
    char op = opStack.top();  //取出运算符
    opStack.pop();  //将其出栈
    int num = numStack.top(); //取出数字
    numStack.pop();  //将其出栈
    switch(op)
    {
      case '+':
        result += num;
        break;
      case '-':
        result -= num;
        break;
      case '*':
        result *= num;
        break;
      case '/':
        result /= num;
        break;
    }
  }
  cout << "计算结果为:" << result << endl; //输出计算结果
  return 0;
}

上述代码中,我们首先定义了两个栈,一个用来储存数字,另一个用来储存运算符。然后我们逐个遍历表达式中的字符,将数字和运算符分别压入栈中。接着,我们从数字栈中取出第一个数字作为计算结果,然后依次取出运算符和数字,并进行计算,最终得到表达式的计算结果。

总结来说,C++表达式求值栈是一种非常常用的数据结构,在进行复杂的数字运算时,可以帮助我们快速有效地进行计算操作。需要注意的是,在进行栈操作时需要根据表达式的特点进行合理的处理,才能得到正确的结果。

  
  

评论区