c - 括号不平衡

标签 c

<分区>

为什么它不打印“Paranthesis are balanced”。每当我传递像“(2+4)”这样的平衡括号时,它就会崩溃。每当我传递像“((3+4()”这样的不平衡括号时,它就会完美运行。这是我的代码。

struct stackADT {
    int count;
    char data[50];
} s;


bool Is_Equal(char b, char c){
    if(b == '(' && c == ')')
            return true;

    if(b == '{' && c == '}')
            return true;


    if(b == '[' && c == ']')
            return true;

    else{
            return false;

  }
}


bool pop(struct stackADT *s, int *num) {
    if (Is_Empty())
        return false;
    else {
        *num = s->data[(s->count) -1];
        (s->count)--;
        return true;
    }
}

int main(void) {
    char expression[100];
    int i, len;
    initialize();
    printf("Enter an expression: ");
    scanf("%s", &expression);
    len = strlen(expression);


    for(i = 0; i < len; i++){
        if(expression[i] == '(' || expression[i] == '{' || expression[i] == '['){
            push(expression[i]);
        }
            if(expression[i] == ')' || expression[i] == '}' || expression[i] == ']'){

                pop(&s,expression[i]);
        }
    }

    if(Is_Equal(pop(&s, expression[i]), expression[i]))
        printf("Parenthesis are balanced\n");
    else{
        printf("Parenthesis are unbalanced\n");
    }
    return 0;
    getch();
}

最佳答案

在:

if(Is_Equal(pop(&s, expression[i]), expression[i]))

i 大于 len(expression 的大小)。而且您的编译器应该会提示,因为您将一个 char 插入了一个指向 int 的指针。

所以,首先打开警告。

关于c - 括号不平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777244/

相关文章:

c - 如何列出目标文件中静态声明的大小?

c - icu unicode 中是否有等效的 strdup ?

c - 在 C 中从字符串更改为 int 时溢出

c - 如何基于数组中的输入值打印星号

c - C中常量的正确使用

c - 简单链表代码出错

java - 我们可以假设 x == (int)sqrt(x * x) 对于所有正整数吗?

c - float 与 double 比较

C - 想要使用符号转换大小写字母

c - 在文本文件中搜索字符串并解析该行(Linux、C)