编写程序,检查源文件中的括号(如{})

 2024-01-09 02:01:05  阅读 0

注意:

1、输入的C源程序除了括号可能不匹配外,没有其他语法错误;

2、不处理字符常量、字符串常量、注释大括号。注释包括单行注释//和多行注释

3、字符和字符串常量不包含特殊转义字符\'、\'

5、程序中出现的有意义的括号数量不超过200个

不一致判定规则:

1、如果发现不匹配的右括号(')'或'}'),则输出右括号及其行号;

2. 当程序处理完成后,如果有不匹配的左括号,则输出其左括号和行号。

【输入表格】

打开当前目录下的.c文件,检查括号是否匹配。

[输出形式]

当括号不匹配时,首先输出可以判断为不匹配的括号及其行号。 如果出现括号不匹配的情况,会输出相关信息,如下所示:

zh

其中,x为“,”、“}”、“,”、“”等符号,n为该符号所在的行号。

如果整个程序的括号匹配,则按照以下顺序输出括号匹配条件,中间不带空格。

()))))}

【示例输入1】

假设当前目录下的输入文件.c内容如下:

#。H

())。

(()\n);//}

【输出样例1】

')'

【示例输入2】

假设当前目录下的输入文件.c内容如下:

#。H

())。

打印机()d(n);()/

【输出样例2】

'{'

【示例输入3】

le="color:rgb(51,51,51);">如果当前目录下的输入文件.c内容如下:

#

(){

(“{}d\n”);

[输出示例3]

(){()}

[示例说明]

示例1:不考虑注释部分的括号和字符串。 程序处理后,得到的括号序列为(){())。 当遇到右括号时,就与最近的左括号匹配,找到最后一个小括号。 与大括号不匹配。

例2:处理后的括号序列为(){(),最后缺少右括号,所以对应的左括号应该输出为不匹配。

##(){FILE*in;in=fopen(".c","r");=1;=0;[200],[200],[1000];//栈用于压入和弹出出栈 出栈操作用于存储所有括号。 如果匹配,则输出 =-1,=-1;;=1;while(loop){temp=fgetc(in);if(temp==EOF)break;(temp=='\n') line++ ;(temp=='"')//如果是双引号,则跳过,直到检测到双引号末尾{while(1){temp=fgetc(in);if(temp=='\\' ) temp=fgetc(in);(temp=='"')break;}}(temp=='\'')//单引号也会被跳过,直到检测到单引号结束,但是在程序中、单引号输入需要使用转义字符\'{while(1){temp=fgetc(in);if(temp=='\\')temp=fgetc(in);(temp=='\ '')break;} }(temp=='/')//这个解释是带着注释出现的,而且注释可能有多行,所以记得增加行数,跳过注释 {temp=fgetc(in );if(temp=='/' ){while((temp=fgetc(in))!='\n');line++;}(temp=='*'){=0;temp=fgetc(in );while(1){if() 中断;while(temp!='*'){temp=fgetc(in);if(temp=='\n')line++;}temp=fgetc(in);if (temp=='\n')line++ ;if(temp=='/')=1;}}}(temp=='(')//找到左括号,压入栈中,可以记录堆栈下标编号,然后记录它是哪一行。 左括号中的下标存储当前行号 {[++]=temp;[++]=temp;[]=line;}(temp=='{'){[++]=temp;[+ + ]=temp;[]=line;}(temp==')'){[++]=temp;[]=line;if(==-1)//栈为空,说明有no match at all 括号{("'%c'%d\n",temp,line);error=1;//标记错误,最后因为error不为0,所以不会全部输出}else{if( []==' ('){--;}else//虽然栈中右括号不是对应的括号,但仍然不匹配输出错误信息{("'%c'%d\n" ,temp,line);error =1;}}}(temp=='}'){[++]=temp;[]=line;if(==-1){("'%c'%d \n",temp,line );error=1;}else{if([]=='{'){--;}else{("'%c'%d\n",temp,line); error=1;}}} ;}if(==0)//左括号可能留在最后,但右括号没有匹配到,上面的判断错误是因为多了一个右括号{("' %c'%d\n",[] ,[]);error=1;}[++]='\0';if(error==0)("%s",);(in); ;}

标签: 匹配 输出 注释

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码