用c++试设计一个算法:检查一个程序中的花括号、方括号和圆括号是否配对,若能够 全部配对则返回1,否则返回0。
时间: 2023-05-29 13:02:38 浏览: 119
假设程序的代码保存在一个字符串中,我们可以使用栈来检查括号是否配对。遍历字符串,遇到左括号就将其入栈,遇到右括号就将栈顶元素出栈。如果栈顶元素与当前右括号不匹配,或者遍历完字符串后栈不为空,说明括号没有配对成功。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 1000
int match_brackets(char *str) {
char stack[MAX_SIZE];
int top = -1;
int len = strlen(str);
for (int i = 0; i < len; i++) {
if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
stack[++top] = str[i];
} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {
if (top < 0) {
return 0; // 没有左括号与之匹配
} else if ((str[i] == ')' && stack[top] == '(') ||
(str[i] == ']' && stack[top] == '[') ||
(str[i] == '}' && stack[top] == '{')) {
top--; // 弹出匹配的左括号
} else {
return 0; // 左右括号不匹配
}
}
}
return top == -1; // 如果栈为空,则全部配对成功
}
int main() {
char str[MAX_SIZE];
printf("Enter a string of brackets: ");
fgets(str, MAX_SIZE, stdin);
if (match_brackets(str)) {
printf("All brackets match!\n");
} else {
printf("Brackets do not match.\n");
}
return 0;
}
```
阅读全文