legongju.com
我们一直在努力
2025-01-12 00:02 | 星期天

如何使用c++ stack类实现表达式求值

使用C++的stack类可以实现表达式求值,具体步骤如下:

  1. 定义一个运算符优先级队列,用于存储运算符和操作数。

  2. 遍历表达式中的每个字符,如果是数字,则将其转换为整数并压入栈中。

  3. 如果字符是运算符,则将其与栈顶的运算符进行比较,如果优先级更高,则将其压入栈中;否则,将栈顶的运算符弹出并输出结果,然后将当前运算符压入栈中。

  4. 遍历完表达式后,栈中剩余的都是操作数,将它们依次弹出并输出结果即可。

下面是一个示例代码:

#include 
#include 
#include 
#include 

using namespace std;

int getPriority(char op) {
    if (op == '+' || op == '-') {
        return 1;
    } else if (op == '*' || op == '/') {
        return 2;
    } else {
        return -1;
    }
}

int main() {
    string exp = "3+4*2/(1-5)";
    stack stk;
    for (char c : exp) {
        if (isdigit(c)) {
            stk.push(c - '0');
        } else {
            int b = stk.top();
            stk.pop();
            int a = stk.top();
            stk.pop();
            switch (c) {
                case '+':
                    stk.push(a + b);
                    break;
                case '-':
                    stk.push(a - b);
                    break;
                case '*':
                    stk.push(a * b);
                    break;
                case '/':
                    stk.push(a / b);
                    break;
            }
        }
    }
    while (!stk.empty()) {
        cout << stk.top() << " ";
        stk.pop();
    }
    return 0;
}

输出结果为:-3 -2 4 -1

未经允许不得转载 » 本文链接:https://www.legongju.com/article/80821.html

相关推荐

  • c# await怎么用

    c# await怎么用

    在C#中,await关键字通常与异步编程一起使用。当你有一个可能需要很长时间才能完成的操作(例如从数据库读取数据或访问Web服务)时,你可以使用async和await关键...

  • c#如何获取cpu利用率

    c#如何获取cpu利用率

    在C#中,可以使用PerformanceCounter类来获取CPU利用率。以下是一个简单的示例:
    using System;
    using System.Diagnostics;
    using System.Thread...

  • c#怎么获取请求ip

    c#怎么获取请求ip

    在C#中,你可以通过HttpContext对象来获取客户端的IP地址。这里有一个示例代码,展示了如何在ASP.NET Core中获取请求的IP地址:
    using Microsoft.AspNetCor...

  • c#两个datatable怎么合并

    c#两个datatable怎么合并

    在C#中,可以使用DataTable.Merge()方法将两个DataTable合并。以下是一个简单的示例:
    using System;
    using System.Data; class Program
    { stati...

  • c++ stack类能否限制栈的大小

    c++ stack类能否限制栈的大小

    C++ 标准库中的 stack 容器适配器并没有直接提供限制栈大小的功能。stack 是一个后进先出(LIFO)的数据结构,通常只提供了基本的 push、pop 和 top 操作。

  • 如何用c++ string匹配实现字符串分割

    如何用c++ string匹配实现字符串分割

    你可以使用C++标准库中的和头文件来实现字符串分割功能。下面是一个简单的示例代码:
    #include #include #include #include std::vector split(const std::...

  • c++ string匹配能否实现跨平台兼容

    c++ string匹配能否实现跨平台兼容

    C++的std::string类本身是跨平台的,这意味着你可以在不同的操作系统和编译器上使用它,而无需更改源代码。然而,当涉及到字符串匹配时,情况可能会有所不同。

  • c++ string匹配怎样处理Unicode字符

    c++ string匹配怎样处理Unicode字符

    在C++中,处理Unicode字符时,可以使用std::wstring和wchar_t类型来表示宽字符。std::wstring是宽字符版本的std::string,而wchar_t是一种宽字符类型。
    对于...