返回信息流已经写了3小时 还是不行 求学长学姐 解答 最好用简单函数解决 说一下思路也行!
要编写一个程序,查找c语言程序中的基本语法错误,如圆括号、方括号、花括号不配对等。要正确处理引号(包括单引号 和双引号)、转义字符序列与注释。
这是一条镜像帖。来源:北邮人论坛 / cpp / #83391同步于 2014/10/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【已解决】关于c语言大一要写的程序作业
yu1336199790
2014/10/17镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
#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 的大作中提到: 】
: 用个栈,遇到“(”入栈,遇到“)”就吧栈顶的“(”出栈,如果栈顶不是“(”就有错误。其他符号情况类似,楼主自己再思考一下,可以再把注释的情况考虑进去
: 发自「贵邮」
可是我们大一还没学这个呢
用lex和yacc来写,轻轻松松
http://www.quut.com/c/ANSI-C-grammar-l.html
http://www.quut.com/c/ANSI-C-grammar-y.html
#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();
}
改正后的代码 能帮忙看一下吗