BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #83391同步于 2014/10/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【已解决】关于c语言大一要写的程序作业

yu1336199790
2014/10/17镜像同步12 回复
已经写了3小时 还是不行 求学长学姐 解答 最好用简单函数解决 说一下思路也行! 要编写一个程序,查找c语言程序中的基本语法错误,如圆括号、方括号、花括号不配对等。要正确处理引号(包括单引号 和双引号)、转义字符序列与注释。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
yu1336199790机器人#1 · 2014/10/17
#include <stdio.h> #include <conio.h> main(){ #define IN 1; #define OUT 0; int o=0,p=0,q=0; //显示错误数量 char abc[1000] ; //总字符串 int c,d,e,f,i,j,k,l,m,n,state; char aa[100],bb[100],cc[100]; char xx[100],yy[100],zz[100]; while( ( c=getchar() )!=EOF){ abc[i]=c; ++i; } for(i=j=0;i<1000;++i){ if(abc[i]='('){ aa[j]=abc[i]; ++j; } } for(i=k=0;i<1000;++i){ if(abc[i]='['){ bb[k]=abc[i]; ++k; } } for(i=l=0;i<1000;++i){ if(abc[i]='{'){ cc[l]=abc[i]; ++l; } } for(i=d=0;i<1000;++i){ if(abc[i]=')'){ xx[d]=abc[i]; ++d; } } for(i=e=0;i<1000;++i){ if(abc[i]=']'){ yy[e]=abc[i]; ++e; } } for(i=f=0;i<1000;++i){ if(abc[i]=='}'){ zz[f]=abc[i]; ++f; } } for(j=0;j<e;++j,--e){ if(aa[j]!='(' && xx[e]!=')') ++o;} for(k=0;k<d;++k,--d){ if(bb[k]!='['&&yy[d]!=']') ++p;} for(j=0;l<f;++l,--f){ if(cc[l]!='{'&&yy[f]!='}') ++q;} printf("这里有%d个()错误\n",o); printf("这里有%d个()错误\n",p); printf("这里有%d个()错误\n\n",q); getch(); } 这是我自己写的 有问题啊 能请大神说明问题一下吗
blackwc2006机器人#2 · 2014/10/17
用个栈,遇到“(”入栈,遇到“)”就吧栈顶的“(”出栈,如果栈顶不是“(”就有错误。其他符号情况类似,楼主自己再思考一下,可以再把注释的情况考虑进去 发自「贵邮」
yu1336199790机器人#3 · 2014/10/18
【 在 blackwc2006 的大作中提到: 】 : 用个栈,遇到“(”入栈,遇到“)”就吧栈顶的“(”出栈,如果栈顶不是“(”就有错误。其他符号情况类似,楼主自己再思考一下,可以再把注释的情况考虑进去 : 发自「贵邮」 可是我们大一还没学这个呢
xiaobing307机器人#4 · 2014/10/18
大一就开始写编译器的节奏
lizz机器人#5 · 2014/10/18
用lex和yacc来写,轻轻松松 http://www.quut.com/c/ANSI-C-grammar-l.html http://www.quut.com/c/ANSI-C-grammar-y.html
liyi5133机器人#6 · 2014/10/18
这不是编译原理的作业么
ashjn2011机器人#7 · 2014/10/18
编译原理妥妥的,感觉要求有点高了
yu1336199790机器人#8 · 2014/10/18
求大神指点啊 思路也行
yu1336199790机器人#9 · 2014/10/18
#include <stdio.h> #include <conio.h> main(){ #define IN 1; #define OUT 0; int o,p,q; //显示错误数量 char abc[1000] ; //总字符串 int c,d,e,f,i,j,k,l,m,n,state; char aa[100],bb[100],cc[100]; char xx[100],yy[100],zz[100]; i=0; o=p=q=0; while( ( c=getchar() )!=EOF){ abc[i]=c; ++i; } for(i=j=0;i<1000;++i){ if(abc[i]='('){ aa[j]=abc[i]; ++j; } } for(i=k=0;i<1000;++i){ if(abc[i]='['){ bb[k]=abc[i]; ++k; } } for(i=l=0;i<1000;++i){ if(abc[i]='{'){ cc[l]=abc[i]; ++l; } } for(i=d=0;i<1000;++i){ if(abc[i]=')'){ xx[d]=abc[i]; ++d; } } for(i=e=0;i<1000;++i){ if(abc[i]=']'){ yy[e]=abc[i]; ++e; } } for(i=f=0;i<1000;++i){ if(abc[i]=='}'){ zz[f]=abc[i]; ++f; } } for(j=0;j<e;++j,--e){ if(!(aa[j]=='(' && xx[e]==')')) ++o;} for(k=0;k<d;++k,--d){ if(!(bb[k]=='[' && yy[d]==']')) ++p;} for(l=0;l<f;++l,--f){ if(!(cc[l]=='{' && yy[f]=='}')) ++q;} printf("这里有%d个()错误\n",o); printf("这里有%d个[]错误\n",p); printf("这里有%d个{}错误\n",q); getch(); } 改正后的代码 能帮忙看一下吗