91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

如何使用c++ stack類實現表達式求值

c++
小樊
84
2024-09-25 08:38:17
欄目: 編程語言

使用C++的stack類可以實現表達式求值,具體步驟如下:

  1. 定義一個運算符優先級隊列,用于存儲運算符和操作數。

  2. 遍歷表達式中的每個字符,如果是數字,則將其轉換為整數并壓入棧中。

  3. 如果字符是運算符,則將其與棧頂的運算符進行比較,如果優先級更高,則將其壓入棧中;否則,將棧頂的運算符彈出并輸出結果,然后將當前運算符壓入棧中。

  4. 遍歷完表達式后,棧中剩余的都是操作數,將它們依次彈出并輸出結果即可。

下面是一個示例代碼:

#include <iostream>
#include <stack>
#include <string>
#include <cctype>

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<int> 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

0
陇南市| 临江市| 伊春市| 祁连县| 新竹县| 观塘区| 和平区| 湛江市| 海伦市| 巧家县| 洞头县| 玛纳斯县| 县级市| 犍为县| 莎车县| 浦江县| 普定县| 锡林郭勒盟| 娄底市| 涞源县| 滦南县| 杭州市| 安溪县| 吴江市| 富顺县| 襄樊市| 丹阳市| 泸西县| 博白县| 攀枝花市| 故城县| 宕昌县| 胶南市| 灌云县| 区。| 徐汇区| 得荣县| 多伦县| 沙雅县| 科技| 平阴县|