21xrx.com
2024-09-20 00:52:48 Friday
登录
文章检索 我的文章 写文章
C++表达式求值栈
2023-06-28 03:00:57 深夜i     --     --
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++表达式求值栈是一种非常常用的数据结构,在进行复杂的数字运算时,可以帮助我们快速有效地进行计算操作。需要注意的是,在进行栈操作时需要根据表达式的特点进行合理的处理,才能得到正确的结果。

  
  

评论区

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