使用c语言,假设表达式中只包含三种括号:圆括号、方括号和花括号,它们可以互相嵌套,如([{}])或({[()]})等均为正确的格式,而{[]})}或{[()]或([]}均为不正确的格式。输入一串括号,如果输入的右括号多余,输出:Extra right brackets 如果输入的左括号多余,输出:Extra left brackets 如果输出的括号不匹配,输出:Brackets not match 如果输入的括号匹配,输出:Brackets match 输入格式:一行只含()[]{}这六种字符,不含其他任何字符的字符串。字符串不超过1000个字符。
时间: 2024-02-22 10:55:50 浏览: 78
好的,这是一个关于括号匹配的问题。我可以帮你写出一个C语言的解决方案。以下是代码示例:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int top = -1;
char stack[MAX_LEN];
int is_left_bracket(char ch) {
return ch == '(' || ch == '[' || ch == '{';
}
int is_right_bracket(char ch) {
return ch == ')' || ch == ']' || ch == '}';
}
int match(char left, char right) {
return (left == '(' && right == ')') || (left == '[' && right == ']') || (left == '{' && right == '}');
}
void push(char ch) {
stack[++top] = ch;
}
char pop() {
return stack[top--];
}
int main() {
char str[MAX_LEN];
scanf("%s", str);
int len = strlen(str);
for (int i = 0; i < len; i++) {
char ch = str[i];
if (is_left_bracket(ch)) {
push(ch);
} else if (is_right_bracket(ch)) {
if (top < 0) {
printf("Extra right brackets\n");
return 0;
}
char left = pop();
if (!match(left, ch)) {
printf("Brackets not match\n");
return 0;
}
}
}
if (top >= 0) {
printf("Extra left brackets\n");
} else {
printf("Brackets match\n");
}
return 0;
}
```
代码中使用一个栈来存储左括号,遇到右括号时从栈中弹出一个左括号并进行匹配,如果不匹配则输出错误信息。最后判断栈中是否还有未匹配的左括号,如果有则输出错误信息。
阅读全文