题目
给出一组代数表达式,请编程判断出他们的括号是否配对正确。
输入
5
[a+(b+c)]*(a+b]
(a-1+b)-(b+c)
x-[a*(b+c))]
a+(b+c+(d-(e+m))
a+b+[c-d*e-(a-b)-c]
第一行中的5表示共有5个表达式需要判断。下面的每一行有一个表达式。要求把这组数据原样保存在文件input.txt中,通过读文件的方式读入数据完成判断。
输出
括号匹配正确打印1,匹配错误打印0。正确的输出结果应该是:
0
1
0
0
1
解题思路
刚开始是想把字符一个一个的获取进行判断,但是文件指向位置的移动无法判断,主要是无法判断eof结束和无法匹配结束,希望barry讲一下。最后一行一行的进行导入,完成程序
源代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fit(FILE *fp,char *str)
{
char c;
int sign1;
int sign2;
sign1=0;
sign2=0;
for(int i=0;i<strlen(str);i++)
{
c=str[i];
if(c=='(')
sign1++;
if(c=='[')
sign2++;
if(c==')')
sign1--;
if(c==']')
sign2--;
if(sign1==-1||sign2==-1)
break;
}
if((sign1==0)&&(sign2==0))
{
printf("1\n");
}
else
printf("0\n");
}
void main()
{
FILE *fp;
char str[80];
char a,d;
int b;
fp=fopen("input.txt","r");
if(fp==NULL)
return;
a=fgetc(fp);
b=atoi(&a);
fseek(fp,2,1);
for(int i=0;i<b;i++)
{
fgets(str,80,fp);
fit(fp,str);
}
}
运行截图
总结
文件忘得差不多了,又在网上看的。前面几个程序,没有做出来,故没打卡。