第二个堆栈使用 GList 打印空白

Second stack prints blank using GList

我正在使用堆栈实现这个数据结构(中缀到后缀)。

基本上,我正在测试推送和打印,没有弹出操作。第一个堆栈,即 stack 保存运算符和数字,而第二个堆栈 stack_precedence 记录优先级。我认为两个堆栈都可以正常工作,但我不明白为什么优先级堆栈不打印优先级数字而是 returns 空白输出。

部分实施:

#include <iostream>
#include <glib.h>

using namespace std;

int main(int argc, char *argv[])
{
        GList *stack = nullptr;
        GList *stack_precedence = nullptr;

        int size = 0;
        for (int i = 0; argv[1][i] != '[=10=]'; i++) {
                int precedence = 0;
                bool is_precedence_set = false;
                switch (argv[1][i]) {
                /*
                 * Precedence order:
                 * 3) ^
                 * 2) / *
                 * 1) + -
                 * 0) ( )
                 */
                case '^':
                        precedence = 3;
                        is_precedence_set = true;
                case '/':
                case '*':
                        if (!is_precedence_set) {
                                precedence = 2;
                                is_precedence_set = true;
                        }
                case '+':
                case '-':
                        if (!is_precedence_set) {
                                precedence = 1;
                                is_precedence_set = true;
                        }
                case '(':
                        if (!is_precedence_set) {
                                precedence = 0;
                                is_precedence_set = true;
                        }

                        stack = g_list_append(
                                        stack, GINT_TO_POINTER(argv[1][i]));
                        stack_precedence = g_list_append(
                                        stack_precedence, GINT_TO_POINTER(precedence));
                        size++;
                        break;
                case ')':
                        if (!is_precedence_set) {
                                precedence = 0;
                                is_precedence_set = true;
                        }
                        break;
                default:
                        if (argv[1][i] >= '0' and argv[1][i] <= '9') {
                                precedence = 9;
                                stack = g_list_append(
                                                stack, GINT_TO_POINTER(argv[1][i]));
                                stack_precedence = g_list_append(
                                                stack_precedence, GINT_TO_POINTER(precedence));
                                size++;
                        }
                }
        }

        cout << "Stack size: " << size << endl;

        stack = g_list_first(stack);
        while (stack != nullptr) {
                char c = GPOINTER_TO_INT(stack->data);
                cout << c;
                stack = g_list_next(stack);
        }
        cout << endl;

        stack_precedence = g_list_first(stack_precedence);
        while (stack_precedence != nullptr) {
                char c = GPOINTER_TO_INT(stack_precedence->data);
                cout << c;
                stack_precedence = g_list_next(stack_precedence);
        }
        cout << endl;

        return 0;
}

我将 2+2 作为参数传递给我的程序,stack 可以准确打印 2+2 但 stack_precedence returns 空白。

我的预期结果是

2+2
919

而不是

2+2
空白

优先顺序是整数而不是字符

int c = GPOINTER_TO_INT(stack_precedence->data);
^^^ change here