c语言去写运行程序时,输入一个包含圆括号、方括号和花括号的字符串,分析其中的圆括号、 方括号和花括号是否正确嵌套和平衡。如果字符串是平衡的,程序将不输出任何内容, 并以EXIT_SUCCESS状态退出。其他情况,将输出一条错误消息,并以失败状态退出。 在扫描字符串遇到(、[或{时,将该该括号入栈;遇到)、]或}时,将从栈中弹出顶 部括号,并检查它是否与字符串中遇到的右括号匹配;如果括号不匹配,或者栈为空, 程序将输出不匹配的括号和遇到的不匹配的括号的索引;如果扫描字符串结束时,栈不 为空,输出信息:open:对应右括号列表。
时间: 2024-03-26 20:40:15 浏览: 45
以下是一个用C语言实现该功能的程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 1000
int is_left_bracket(char c) {
return c == '(' || c == '[' || c == '{';
}
int is_right_bracket(char c) {
return c == ')' || c == ']' || c == '}';
}
int is_same_type(char left, char right) {
if (right == ')' && left == '(') {
return 1;
} else if (right == ']' && left == '[') {
return 1;
} else if (right == '}' && left == '{') {
return 1;
} else {
return 0;
}
}
int main() {
char str[MAX_LEN];
fgets(str, MAX_LEN, stdin);
str[strcspn(str, "\n")] = '\0'; // 去掉换行符
int len = strlen(str);
int stack[MAX_LEN], top = -1; // 使用数组实现栈,top表示栈顶索引
for (int i = 0; i < len; i++) {
char c = str[i];
if (is_left_bracket(c)) {
stack[++top] = i; // 将左括号的索引入栈
} else if (is_right_bracket(c)) {
if (top == -1 || !is_same_type(str[stack[top]], c)) {
printf("Mismatched bracket: %c at index %d\n", c, i);
if (top != -1) {
printf("Open: ");
for (int j = 0; j <= top; j++) {
printf("%c at index %d, ", str[stack[j]], stack[j]);
}
printf("\n");
}
return EXIT_FAILURE;
} else {
top--;
}
}
}
if (top != -1) {
printf("Open: ");
for (int i = 0; i <= top; i++) {
printf("%c at index %d, ", str[stack[i]], stack[i]);
}
printf("\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
```
该程序与之前的C++程序类似,使用栈来对括号进行匹配。在遍历字符串时,遇到左括号就将其索引入栈;遇到右括号就从栈中弹出一个左括号,并检查它是否与右括号匹配。如果括号不匹配,或者栈为空,程序将输出错误信息;否则,程序将继续遍历字符串。如果遍历完字符串后,栈不为空,程序将输出信息提示哪些左括号没有匹配的右括号。如果括号全部匹配,程序将以EXIT_SUCCESS状态退出。
阅读全文