问题描述】 编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。 【输入文件】 输入文件为当前目录下的check.in,是一段任意的C程序。 【输出文件】 输出文件为当前目录下的check.out。该文件只有一行,是一个单词"True"或"False"。如果没有括号匹配错误则输出"True",否则输出"False"。
时间: 2024-01-22 18:18:10 浏览: 60
用C语言检查输入括号是否匹配
5星 · 资源好评率100%
以下是一个简单的 C++ 实现:
```cpp
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
int main()
{
ifstream fin("check.in");
ofstream fout("check.out");
char c;
stack<char> s;
int left_parentheses = 0, right_parentheses = 0;
int left_braces = 0, right_braces = 0;
while (fin.get(c)) {
if (c == '(') {
s.push(c);
left_parentheses++;
} else if (c == ')') {
if (s.empty() || s.top() != '(') {
fout << "False";
return 0;
}
s.pop();
right_parentheses++;
} else if (c == '{') {
s.push(c);
left_braces++;
} else if (c == '}') {
if (s.empty() || s.top() != '{') {
fout << "False";
return 0;
}
s.pop();
right_braces++;
}
}
if (!s.empty() || left_parentheses != right_parentheses || left_braces != right_braces) {
fout << "False";
} else {
fout << "True";
}
return 0;
}
```
程序首先打开输入和输出文件,然后遍历输入文件中的每个字符。当遇到左括号或左大括号时,将其推入栈中,并更新对应的计数器。当遇到右括号或右大括号时,弹出栈顶元素并检查是否匹配,同时更新对应的计数器。如果发现栈为空或栈顶元素与当前字符不匹配,则输出 False 并结束程序。
在遍历完成后,如果栈不为空或左右括号或左右大括号的个数不相等,则输出 False。否则输出 True。
阅读全文