编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。 【输入文件】 输入文件为当前目录下的check.in,是一段任意的C程序。 【输出文件】 输出文件为当前目录下的check.out。该文件只有一行,是一个单词"True"或"False"。如果没有括号匹配错误则输出"True",否则输出"False"。
时间: 2024-01-22 10:18:15 浏览: 56
以下是一个示例程序,用于对C源程序进行括号匹配检查并输出检查结果到文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEN 500
int main() {
FILE *fin, *fout;
char str[MAX_LEN + 1];
int i, len, stack[MAX_LEN], top = -1;
int left_parenthesis_cnt = 0, right_parenthesis_cnt = 0;
int left_bracket_cnt = 0, right_bracket_cnt = 0;
int valid = 1;
fin = fopen("check.in", "r");
fout = fopen("check.out", "w");
fgets(str, MAX_LEN + 1, fin);
len = strlen(str);
for (i = 0; i < len; i++) {
if (str[i] == '(') {
left_parenthesis_cnt++;
stack[++top] = 0;
} else if (str[i] == ')') {
right_parenthesis_cnt++;
if (top < 0 || stack[top] != 0) {
valid = 0;
break;
}
top--;
} else if (str[i] == '{') {
left_bracket_cnt++;
stack[++top] = 1;
} else if (str[i] == '}') {
right_bracket_cnt++;
if (top < 0 || stack[top] != 1) {
valid = 0;
break;
}
top--;
}
}
if (left_parenthesis_cnt != right_parenthesis_cnt ||
left_bracket_cnt != right_bracket_cnt || top >= 0) {
valid = 0;
}
fprintf(fout, "%s", valid ? "True" : "False");
fclose(fin);
fclose(fout);
return 0;
}
```
程序首先打开输入文件和输出文件,然后读取输入文件中的一行字符串。接下来,程序遍历字符串中的每个字符,并对左右小括号、左右大括号进行计数和匹配。使用栈来辅助匹配,如果遇到左括号则将其入栈,遇到右括号则将栈顶元素出栈并检查匹配性。如果在匹配过程中发现不匹配的情况,则将变量valid设为0,表示括号不匹配。最后,程序检查左右小括号、左右大括号的数量是否相等,以及栈是否为空,来确保括号的嵌套规则正确。最后,程序将检查结果输出到输出文件中。
阅读全文