題目
給出一組代數(shù)表達式,請編程判斷出他們的括號是否配對正確。
輸入
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個表達式需要判斷。下面的每一行有一個表達式。要求把這組數(shù)據(jù)原樣保存在文件input.txt中,通過讀文件的方式讀入數(shù)據(jù)完成判斷。
輸出
括號匹配正確打印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);
}
}
運行截圖

Paste_Image.png
總結
文件忘得差不多了,又在網(wǎng)上看的。前面幾個程序,沒有做出來,故沒打卡。