永发信息网

急!!!请教C语言程序设计高手!

答案:3  悬赏:30  手机版
解决时间 2021-01-26 10:08
  • 提问者网友:风月客
  • 2021-01-25 09:19
急!!!请教C语言程序设计高手!
最佳答案
  • 五星知识达人网友:神也偏爱
  • 2021-01-25 10:15
http://topic.csdn.net/t/20061211/08/5220911.html

http://bbs.okhere.net/bbsArchives_view/13876-420611/

你慢慢找吧。。。
全部回答
  • 1楼网友:你哪知我潦倒为你
  • 2021-01-25 12:20
不考虑四则运算对错,只判断括号配对,并要求大括号在外层,方括号在中层,小括号在内层。
程序一个字符一个字符读入表达式,遇到括号,存放到 char p[]中。例如 char p[]="({[()(())()][]})";
下面是处理判断 p中括号配对 程序。
#include
#include
void main()
{
char p[]="({[()(())()][]})";
int len;
int i,j,k;
int flag =0;
len=strlen(p);
if (len%2 != 0) {printf("not match,len = %d",len); exit(0);};
loop1:
for (i=0;i if (strncmp(&p[0]+i,"()",2) == 0) {
strcpy(&p[0]+i,&p[0]+i+2);
len = len - 2;
flag = 1;
printf("%s\n",p);
};
}
if (flag==2) goto Lab01;
flag = flag + 1;
if (len ==0 ){printf("good match! %s\n",p); exit(0);}else goto loop1;
Lab01:;
for (i=0;iif (strncmp(&p[0]+i,"(",1) == 0) {printf("not match1 %s",p); exit(0);};
if (strncmp(&p[0]+i,")",1) == 0) {printf("not match1 %s",p); exit(0);};
};
flag =0;
loop2:
for (i=0;i if (strncmp(&p[0]+i,"[]",2) == 0) {
strcpy(&p[0]+i,&p[0]+i+2);
len = len - 2;
flag = 1;
printf("%s\n",p);
};
}
if (flag==2) goto Lab02;
flag = flag + 1;
if (len ==0 ){printf("good match! %s\n",p); exit(0);}else goto loop2;
Lab02:;
for (i=0;iif (strncmp(&p[0]+i,"[",1) == 0) {printf("not match2 %s",p); exit(0);};
if (strncmp(&p[0]+i,"]",1) == 0) {printf("not match2 %s",p); exit(0);};
};
flag =0;
loop3:
for (i=0;i if (strncmp(&p[0]+i,"{}",2) == 0) {
strcpy(&p[0]+i,&p[0]+i+2);
len = len - 2;
flag = 1;
printf("%s\n",p);
};
}
if (flag==2) goto Lab03;
flag = flag + 1;
if (len == 0 ){printf("good match! %s\n",p); exit(0);}else goto loop3;
Lab03:;
for (i=0;iif (strncmp(&p[0]+i,"{",1) == 0) {printf("not match3: %s",p); exit(0);};
if (strncmp(&p[0]+i,"}",1) == 0) {printf("not match3: %s",p); exit(0);};
};
printf("%s",p);
exit(0);
}
上面用了flag==2 (层),你可以用3,4,5,6。。较大的数,处理嵌套较深情况,也可增加条件判断而退出循环。
  • 2楼网友:独行浪子会拥风
  • 2021-01-25 10:59
显然递归的想法过于复杂了,偶的算法描述如下:
碰到左括号计数器加一,反之减一
这样可以利用3个参数,遍历字符串一次,遍历时检查参数值必须>=0,且满足其他一些必要的条件,遍历后检查3参数皆为0即可
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯