C源程序括号匹配检查(C语言)

【问题描述】

编写程序,检查给定的C源程序文件中花括号是否匹配,规定花括号的总个数不超过50个。花括号匹配规则:
1)文件中左花括号“{”个数与右花括号“}”个数相等;
2)从文件中头开始顺序查找右花括号“}”的个数在任何时候均不超过所遇到的左花括号“{”个数

注意:
1)源程序注释中(/* … */)花括号应被忽略,不参与匹配。
2)源程序中的字符串常量不会出现花括号。

【输入形式】

要检查的C源程序文件名为input.c,在当前目录下。

【输出形式】

若花括号匹配,则向控制台输出1,并在新的一行上输出相应的花括号串;若不匹配,则向控制台输出0,同时在新的一行上输出相应的花括号串。

【样例输入】

假如当前目录下input.c文件的内容为:

#include <stdio.h>

main()
{
int a,b,i,sum1,sum2;

/{input}/
scanf("%d%d",&a,&b);

sum1=sum2=0;
for(i=a;i<=b;i++)
{
if(i%2==0)
{
sum1+=i;
}
else
{
sum2+=i;
}
}
/output}/
printf(“Sum1=%d, Sum2=%d”,sum1,sum2);
}

【样例输出】

1
{{{}{}}}

【样例说明】

源程序input.c中的花括号符合匹配规则,所以先输出1。然后依次输出所有出现的花括号,但注意注释中的花括号不参与匹配,也不输出。

#include<stdio.h>
int main()
{
	FILE* f;
	f = fopen("input.c", "r");
	char c[1000];
	int i,count=0,num=0,a[50],x=0,y=0;//x为“{”数目,y为“}”数目,数组a中1代表“{”,-1代表“}”
	int flag = 1, k = 0;//k用来判断右边括号是否超过左边
	while (!feof(f))
		fscanf(f, "%c",&c[count++]);//以字符形式输入
	for (i = 0; i < count; i++)
	{
		if (c[i] == '/' && c[i + 1] == '*')//排除注释中的括号
		{
			i++;
			while (c[i] != '*' || c[i + 1] != '/') { i++; }
			i += 2;
		}
		if (c[i] == '{')
		{
			k++;
			a[num++] = 1;
			x++;
		}
		if (c[i] == '}')
		{
			k--;
			a[num++] = -1;
			y++;
		}
		if (k < 0&&flag==1)//右花括号超过左花括号,判断flag==1即防止不匹配后又对flag的值修改(易忽略)
			flag = 0;
	}
	if (x != y)
		flag = 0;
	printf("%d\n", flag);
	for (i = 0; i < num; i++)
	{
		if (a[i] == 1)
			printf("{");
		else
			printf("}");
	}
	fclose(f);
	return 0;
}
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值