编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。
时间: 2023-11-14 21:09:50 浏览: 20
以下是一个简单的C程序,可以实现对输入源程序中左右大括号、小括号的个数是否相等的检查,并将检查结果输出到文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 500 // 输入文件最长不超过500个字符
int main() {
char input[MAX_LEN + 1]; // 输入字符串
char output[MAX_LEN + 1]; // 输出字符串
int i, j, len, count1 = 0, count2 = 0, count3 = 0, flag = 0; // count1、count2、count3 分别为左右括号的个数,flag 表示是否存在嵌套
// 读取输入文件
FILE *fp_in = fopen("input.txt", "r");
if (fp_in == NULL) {
printf("Failed to open input file.\n");
exit(1);
}
fgets(input, MAX_LEN + 1, fp_in);
fclose(fp_in);
// 检查左右括号的个数和嵌套情况
len = strlen(input);
for (i = 0; i < len; i++) {
if (input[i] == '(') {
count1++;
if (flag == 1) {
printf("Error: Nested parentheses.\n");
exit(1);
}
} else if (input[i] == ')') {
count1--;
if (count1 < 0) {
printf("Error: Unmatched parentheses.\n");
exit(1);
}
if (flag == 1) {
printf("Error: Nested parentheses.\n");
exit(1);
}
} else if (input[i] == '{') {
count2++;
if (flag == 1) {
printf("Error: Nested braces.\n");
exit(1);
}
flag = 1;
} else if (input[i] == '}') {
count2--;
if (count2 < 0) {
printf("Error: Unmatched braces.\n");
exit(1);
}
if (flag == 0) {
printf("Error: Brace not nested.\n");
exit(1);
}
flag = 0;
} else if (input[i] == '[') {
count3++;
if (flag == 1) {
printf("Error: Nested brackets.\n");
exit(1);
}
} else if (input[i] == ']') {
count3--;
if (count3 < 0) {
printf("Error: Unmatched brackets.\n");
exit(1);
}
if (flag == 1) {
printf("Error: Nested brackets.\n");
exit(1);
}
}
}
// 检查左右括号的个数是否相等
if (count1 != 0 || count2 != 0 || count3 != 0) {
printf("Error: Unmatched parentheses, braces or brackets.\n");
exit(1);
}
// 将检查结果输出到文件中
FILE *fp_out = fopen("output.txt", "w");
if (fp_out == NULL) {
printf("Failed to open output file.\n");
exit(1);
}
sprintf(output, "Number of parentheses: %d\nNumber of braces: %d\nNumber of brackets: %d\nAll parentheses, braces and brackets are matched.\n", count1, count2, count3);
fputs(output, fp_out);
fclose(fp_out);
return 0;
}
```
程序运行时,输入文件 "input.txt" 中应包含待检查的源程序代码,输出结果将保存在文件 "output.txt" 中。程序会依次检查左右括号、大括号和中括号的个数,同时检查是否存在嵌套和交叉嵌套的情况。如果检查结果不符合要求,程序将输出错误信息并退出。否则,程序将输出左右括号、大括号和中括号的个数,并提示所有括号都匹配。