输入 输入包含n + 1行: 第一行有一个正整数n(0 < n < 10)表示下面有n行算式输入。 第二行至第n + 1行为n个算式。每行的字符数不超过1000个。 输出 输出n行是否匹配的结果,如果匹配则输出“yes”,否则输出“no”(不输出引号)。用c语言编程
时间: 2023-11-22 16:56:32 浏览: 174
以下是一个简单的用 C 语言实现的程序,用于判断输入的算式是否匹配:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 1000
typedef struct Stack {
char data[MAX_LENGTH];
int top;
} Stack;
void initStack(Stack *stack) {
stack->top = -1;
}
void push(Stack *stack, char c) {
stack->data[++stack->top] = c;
}
char pop(Stack *stack) {
return stack->data[stack->top--];
}
int isEmpty(Stack *stack) {
return stack->top == -1;
}
int isMatch(char a, char b) {
return (a == '(' && b == ')') || (a == '[' && b == ']') || (a == '{' && b == '}');
}
int isBalanced(char *s) {
Stack stack;
initStack(&stack);
for (int i = 0; s[i]; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
push(&stack, s[i]);
} else if (s[i] == ')' || s[i] == ']' || s[i] == '}') {
if (isEmpty(&stack) || !isMatch(pop(&stack), s[i])) {
return 0;
}
}
}
return isEmpty(&stack);
}
int main() {
int n;
scanf("%d", &n);
getchar();
for (int i = 0; i < n; i++) {
char s[MAX_LENGTH];
fgets(s, MAX_LENGTH, stdin);
if (isBalanced(s)) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
```
在这个程序中,我们使用了一个栈来辅助判断算式是否匹配。具体来说,我们遍历算式中的每个字符,如果是左括号(即 `(`、`[` 或 `{`)就将其入栈,否则如果是右括号(即 `)`、`]` 或 `}`)就从栈中取出一个字符,并判断这两个字符是否匹配。如果匹配就继续遍历,否则就返回 `0` 表示不匹配。最后,如果栈为空,说明所有左括号都有与之匹配的右括号,返回 `1` 表示匹配,否则返回 `0` 表示不匹配。
阅读全文
相关推荐
















