编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。
时间: 2023-11-14 10:09:49 浏览: 48
以下是一个简单的C程序,用于对输入源程序进行括号匹配检查,并将检查结果输出到指定的文件中。它使用了栈这种数据结构来实现括号匹配的检查。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 500
typedef struct Stack {
char data[MAX_LEN];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_LEN - 1;
}
void push(Stack *s, char c) {
if (isFull(s)) {
printf("Stack is full!\n");
exit(1);
}
s->data[++s->top] = c;
}
char pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
exit(1);
}
return s->data[s->top--];
}
int match(char c1, char c2) {
return (c1 == '(' && c2 == ')') ||
(c1 == '[' && c2 == ']') ||
(c1 == '{' && c2 == '}');
}
int check(char *s) {
Stack stack;
init(&stack);
int len = strlen(s);
for (int i = 0; i < len; i++) {
char c = s[i];
if (c == '(' || c == '[' || c == '{') {
push(&stack, c);
} else if (c == ')' || c == ']' || c == '}') {
if (isEmpty(&stack) || !match(pop(&stack), c)) {
return 0;
}
}
}
return isEmpty(&stack);
}
int main() {
char input[MAX_LEN];
printf("Please input the source code:\n");
fgets(input, MAX_LEN, stdin);
input[strcspn(input, "\n")] = '\0'; // 删除输入中的换行符
int result = check(input);
FILE *fp = fopen("output.txt", "w");
if (result) {
fprintf(fp, "The brackets match!\n");
} else {
fprintf(fp, "The brackets do not match!\n");
}
fclose(fp);
return 0;
}
```
程序的思路比较简单,首先读入待检查的源程序字符串,然后遍历字符串中的每一个字符。如果遇到左括号,就将其压入栈中;如果遇到右括号,则弹出栈顶元素并进行匹配。如果匹配成功,则继续遍历;否则,说明括号不匹配,直接返回错误。
最后,将检查结果输出到指定的文件中。如果括号匹配,则输出"The brackets match!";否则,输出"The brackets do not match!"。
注意,上述程序只是一个简单的示例,还有许多可以优化的地方。例如,可以添加更多的错误检查,如检查输入字符串是否超过最大长度限制等。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)