修改后完整代码给我看看
时间: 2024-10-13 12:17:41 浏览: 6
由于您已经提到了如何修改输入字符串,这里是完整的代码,去掉了末尾的`@`字符:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义栈的最大容量
#define MAX_SIZE 20
// 定义栈结构体
typedef struct {
int top;
char items[MAX_SIZE];
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, char element) {
if (!isFull(s)) {
s->items[++(s->top)] = element;
} else {
printf("Stack Overflow!\n");
exit(EXIT_FAILURE);
}
}
// 出栈操作
char pop(Stack *s) {
if (!isEmpty(s)) {
return s->items[(s->top)--];
} else {
printf("Stack Underflow!\n");
exit(EXIT_FAILURE);
}
}
// 检查括号是否匹配
bool checkParentheses(char *expression) {
Stack s;
initStack(&s);
for (int i = 0; expression[i]; i++) { // 注意这里去掉 @ 后,循环条件改为 "expression[i]"
if (expression[i] == '(') {
push(&s, expression[i]);
} else if (expression[i] == ')') {
if (isEmpty(&s)) {
return false;
}
pop(&s);
}
}
return isEmpty(&s);
}
int main() {
char expression[255];
printf("请输入表达式: ");
scanf("%s", expression); // 去掉或替换末尾的""
if (checkParentheses(expression)) {
printf("YES\n");
} else {
printf("NO\n");
}
return 0;
}
```
现在你可以用这个代码尝试检查像 `2*(x+y)/(1-x)` 这样的表达式的括号匹配情况了。如果还有其他问题,可以告诉我哦。