编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。
时间: 2023-11-14 21:09:46 浏览: 125
以下是一个基本的实现,使用栈来进行括号匹配检查:
```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 initStack(Stack *s) {
s->top = -1;
}
// 入栈
void push(Stack *s, char c) {
if (s->top == MAX_LEN - 1) {
printf("Stack Overflow\n");
exit(0);
}
s->data[++s->top] = c;
}
// 出栈
char pop(Stack *s) {
if (s->top == -1) {
printf("Stack Underflow\n");
exit(0);
}
return s->data[s->top--];
}
// 检查括号匹配
void checkBrackets(char *str) {
Stack s;
initStack(&s);
int len = strlen(str);
for (int i = 0; i < len; i++) {
char c = str[i];
switch (c) {
case '(':
case '{':
push(&s, c);
break;
case ')':
if (s.top != -1 && s.data[s.top] == '(') {
pop(&s);
} else {
printf(") not matched\n");
return;
}
break;
case '}':
if (s.top != -1 && s.data[s.top] == '{') {
pop(&s);
} else {
printf("} not matched\n");
return;
}
break;
default:
break;
}
}
if (s.top == -1) {
printf("All brackets matched\n");
} else {
printf("Not all brackets matched\n");
}
}
// 从文件读取字符串
void readFromFile(char *filename, char *str) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("File not found\n");
exit(0);
}
fgets(str, MAX_LEN, fp);
fclose(fp);
}
// 将结果输出到文件
void writeToFile(char *filename, char *result) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("File not found\n");
exit(0);
}
fprintf(fp, "%s", result);
fclose(fp);
}
int main() {
char str[MAX_LEN];
char result[MAX_LEN];
memset(result, 0, sizeof(result));
readFromFile("input.txt", str);
checkBrackets(str);
strcpy(result, str);
writeToFile("output.txt", result);
return 0;
}
```
上面的程序将输入文件中的文本读入到一个字符数组中,然后调用 `checkBrackets` 函数来检查括号匹配,最后将结果写入输出文件。你可以根据需要进行修改和扩展。
阅读全文