为什么它不打印" Paranthesis是平衡的"。每当我通过平衡括号时它会崩溃,例如"(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();
}
答案 0 :(得分:1)
在:
i
len
大于expression
( compile 'com.facebook.android:facebook-android-sdk:4.+'
的大小)。并且你的编译器应该抱怨,因为你是一个char,一个指向int的指针是预期的。
所以,先打开警告。
答案 1 :(得分:1)
函数Is_Equal
具有proto类型:
bool Is_Equal(char b, char c)
^^^^^^
Expects a char
函数pop
具有proto类型:
bool pop(struct stackADT *s, int *num)
^^^^
Returns a bool
所以这一行有一个普遍的问题:
if(Is_Equal(pop(&s, expression[i]), expression[i]))
^^^^^^^^^^^^^^^^^^^^^^
bool but char was expected!
关于pop
函数也可以这么说。它期望int*
作为第二个参数,但您传递char
。例如:
pop(&s,expression[i]);