2024年10月括号匹配问题c++(括号匹配 c++)

 更新时间:2024-10-12

  ⑴括号匹配问题c++(括号匹配c++

  ⑵boolcheck(stringexpression){stringc;for(inti=;i《expression.length();i++){if(string(“(《{)!=string::npos)c.push_back(expression);elseif(string(“)》}]“).find(expression)!=string::npos){if(c.empty())returnfalse;elseif(expression!=)//这里应该怎么写?returnfalse;elsec.pop_back();}}returnc.empty();}标记的地方应该是判断expression“这个字符之间,所以不存在其他情况,如““与““的差为,但他们不能进入判断语句中。还有,请楼主在写程序的时候注意缩进。我复制下来看了好久才看懂--

  ⑶c++洛谷括号匹配怎么做

  ⑷c++洛谷括号匹配解题步骤;.初始化一个栈.读取一个字符,如果ch!=’’,则执行第三步,否则转向执行第五步.如果ch=’(’,入栈.如果ch=’)’,判断栈是否为空,不为空则让’(’出栈,为空则括号不匹配.读完所有的字符后,判断栈是否为空,不为空则括号不匹配,为空则括号匹配

  ⑸这是顺序栈:structStack{chardata;inttop;//栈顶下标};

  ⑹struct?记录{char?括号;int?行数;int?位置;};

  ⑺记录下括号所在的位置,作为栈的元素类型。出错的时候把行数输出就行了

  ⑻这是以前做的科学计算的栈以及功能函数,支持小数、多位数、加减乘除、括号运算,会自动判断表达式正误,呵呵!希望对你有所帮助,当然也包括了括号匹配功能。其实括号匹配功能关键就在于左右大括号小括号的位置以及数量判断。根据实例分析一下很快就能写好算法。//在In(c)里判断括号是否匹配//栈及其功能声明部分//SqStack_theta为运算符栈//SqStack_value为数据栈//_theta为运算符栈功能函数标识//_value为数据栈功能函数标识#defineSTACK_INIT_SIZE#defineSTACKINCERMENT#defineERROR#defineOK#defineOVERFLOW-#include“stdio.h“#include“malloc.h“#include“stdlib.h“typedefcharSElemTypeOPTR;typedefdoubleSElemTypeOPND;typedefintStatus;typedefstruct{SElemTypeOPTR*base;SElemTypeOPTR*top;intstacksize;}SqStack_theta;StatusInitStack_theta(SqStack_theta&s){s.base=(SElemTypeOPTR*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPTR));if(!s.base)exit(OVERFLOW);s.top=s.base;s.stacksize=STACK_INIT_SIZE;returnOK;}StatusPush_theta(SqStack_theta&s,SElemTypeOPTRe){if(s.top-s.base》=s.stacksize){s.base=(SElemTypeOPTR*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPTR));if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCERMENT;};*s.top++=e;returnOK;}StatusPop_theta(SqStack_theta&s,SElemTypeOPTR&e){if(s.top==s.base)returnOVERFLOW;e=*--s.top;returnOK;}StatusSEmpty_theta(SqStack_theta&s){if(s.base==s.top)returnOK;elsereturnERROR;}StatusGetTop_theta(SqStack_theta&s){if(s.top==s.base)returnOVERFLOW;return*(s.top-);}////OPNDstack//typedefstruct{SElemTypeOPND*base;SElemTypeOPND*top;intstacksize;}SqStack_value;StatusInitStack_value(SqStack_value&s){s.base=(SElemTypeOPND*)malloc(STACK_INIT_SIZE*sizeof(SElemTypeOPND));if(!s.base)exit(OVERFLOW);s.top=s.base;s.stacksize=STACK_INIT_SIZE;returnOK;}StatusPush_value(SqStack_value&s,SElemTypeOPNDe){if(s.top-s.base》=s.stacksize){s.base=(SElemTypeOPND*)realloc(s.base,(s.stacksize+STACKINCERMENT)*sizeof(SElemTypeOPND));if(!s.base)exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCERMENT;};*s.top++=e;returnOK;}StatusPop_value(SqStack_value&s,SElemTypeOPND&e){if(s.top==s.base)returnOVERFLOW;e=*--s.top;returnOK;}SElemTypeOPNDGetTop_value(SqStack_value&s){if(s.top==s.base)returnOVERFLOW;return*(s.top-);}//判断优先级返回int型//》//=//-《//不匹配或者其他符号//优先级判断intPrecede(chara,charc){switch(a){case’+’:switch(c){case’+’:return;break;case’-’:return;break;case’*’:return-;break;case’/’:return-;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;case’-’:switch(c){case’+’:return;break;case’-’:return;break;case’*’:return-;break;case’/’:return-;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;case’*’:switch(c){case’+’:return;break;case’-’:return;break;case’*’:return;break;case’/’:return;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;case’/’:switch(c){case’+’:return;break;case’-’:return;break;case’*’:return;break;case’/’:return;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;case’(’:switch(c){case’+’:return-;break;case’-’:return-;break;case’*’:return-;break;case’/’:return-;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;case’)’:switch(c){case’+’:return;break;case’-’:return;break;case’*’:return;break;case’/’:return;break;case’(’:return;break;case’)’:return;break;case’#’:return;break;};break;case’#’:switch(c){case’+’:return-;break;case’-’:return-;break;case’*’:return-;break;case’/’:return-;break;case’(’:return-;break;case’)’:return;break;case’#’:return;break;};break;}}//判断c=getchar()类型返回int//属于//数据//浮点//左右括号//其他符号intIn(charc){switch(c){case’+’:case’-’:case’*’:case’/’:case’#’:return;break;case’.’:return;break;case:case:case:case:case:case:case:case:case:case:return;break;case’(’:return;break;case’)’:return;break;default:return;}}//运算函数返回SElemTypeOPND型运算结果//////SElemTypeOPNDOperate(SElemTypeOPNDa,chartheta,SElemTypeOPNDb){switch(theta){case’+’:return(a+b);break;case’-’:return(a-b);break;case’*’:return(a*b);break;case’/’:return(a/b);break;default:return;}}//录入和运算部分//n,m,f均为中间变量,n为整数部分多位数中间变量,m为转化浮点所用中间变量,f为浮点中间变量;//同过In(c)判断n,f;//n多位整数;接受到运算符则n=//f为浮点数;接收到运算符则f=//k括号SElemTypeOPNDkxjs(){SElemTypeOPTRc,x,theta;SElemTypeOPNDa,b;intn=;intm=;intf=;SElemTypeOPNDtemp=;SqStack_thetaOPTR;SqStack_valueOPND;InitStack_theta(OPTR);InitStack_value(OPND);Push_theta(OPTR,’#’);c=getchar();if(In(c)!=&&In(c)!=){printf(“表达式错误,首位不能为’%c’

  ⑼“,c);exit();}//首位必须是数字或者(elsewhile(c!=’#’||GetTop_theta(OPTR)!=’#’){switch(In(c)){case:printf(“表达式错误,请不要输入非法字符’%c’

  ⑽“,c);exit();break;//非法字符case:f=;c=getchar();break;case:{if(f){m=m*;Pop_value(OPND,temp);Push_value(OPND,temp+Operate(c-,’/’,m));c=getchar();}else{if(n!=){Pop_value(OPND,temp);Push_value(OPND,temp*+c-);c=getchar();}else{n=;Push_value(OPND,(c-));c=getchar();}}};if(In(c)==){printf(“表达式错误,请不要在数字后输入’(’

  ⑾“);exit();}elsebreak;//数字后直接跟(case:case:case:{n=;f=;m=;switch(Precede(GetTop_theta(OPTR),c)){case:Pop_theta(OPTR,theta);Pop_value(OPND,b);Pop_value(OPND,a);Push_value(OPND,Operate(a,theta,b));break;case:Pop_theta(OPTR,x);c=getchar();break;case-:Push_theta(OPTR,c);c=getchar();if((In(GetTop_theta(OPTR))==||In(GetTop_theta(OPTR))==)&&(In(c)==||In(c)==)){printf(“表达式错误,请不要在’%c’后输入’%c’

  ⑿“,GetTop_theta(OPTR),c);exit();}////错误:’(-’和’-)’elsebreak;case:printf(“表达式错误,括号不匹配

  ⒀“);//括号匹配问题exit();}};break;}}returnGetTop_value(OPND);}

  ⒁c++栈的问题,写个程序解决括号的匹配问题

  ⒂#include《iostream》usingnamespacestd;voidprint(intN){inttemp=N;intcount=;stack《int》bi;do{bi.push(temp%);temp/=;count++;}while(temp!=);while(count--)cout《《endl;}只有进制转进制才要Stack.上面的只是进制转进制的Function.main的话自己写吧...----------------括号匹配的话,只要遇到一个左括号就把它放入栈里面,遇到一个右括号就从栈里面取顶进行匹配....如果匹配成功,就读取下一个括号,直至读完最后一个括号,并且栈也被清空,那么匹配成功...如果过程中出现匹配错误,如左右括号“()“不一致,栈中已无括号可匹配,或者最后栈中还有括号未进行匹配,都属于括号匹配失败......另外,虚机团上产品团购,超级便宜

  ⒃c++找错误(括号匹配问题

  ⒄#include《iostream.h》#include《stdlib.h》constintmaxsize=;//最大元素个数typedefcharDatatype;classseqstack{inttop;Datatype*s;public:seqstack();//构造函数~seqstack();//析构函数voidpush(Datatypex);voidmatch(char*k);};seqstacktemp;seqstack::seqstack(){top=;s=newDatatype;}seqstack::~seqstack(){deletes;}voidseqstack::push(Datatypex){if(top==maxsize){cout《《“栈满.“《《endl;exit();}else{s=x;}}boolma(chara,charb){if((a==’(’&&b==’)’)||(a==’’)||(a==’{’&&b==’}’))returntrue;elsereturnfalse;}voidseqstack::match(char*k){intu,v;for(inti=;k!=’’;i++){if(k’||’{’||’}’){temp.push(k);top++;}}if(top%==){cout《《“括号多余“《《endl;}else{u=top/;v=u+;while(u!=-){if(ma(s)){u--;v++;}else{cout《《“括号不匹配“《《endl;break;}}if(u==-)cout《《“左右括号匹配正确“《《endl;}}voidmain(){charp;cout《《“请输入一个含括号的字符串“《《endl;cin》》p;temp.match(p);}只是修改编译错误吗?我改好了,还修改了个死循环,你少了一边大括号,还有case那加上了break

  ⒅给你个思路,自己实现去吧:利用堆栈进行括号配对检查的算法如下:.首先创建一个空栈.从源程序读入符号.若读入的是开括号,就进栈.若读入的是一个闭气括号,但栈是空的,则出错.将栈中的符号出栈.如果出栈的符号和读入的闭括号不匹配,出错继续从文件中读入下一个符号,非空则转向,否则执行.若栈非空,报告出错,否则括号配对成功.

  ⒆帮你看了第二个程序。整个程序只有一个地方是有问题的,就是i=,字符串数组的下标是从开始的,如果i=,搜索是从第二个字符开始的,当然就找不到“(“,也就无法匹配了。只要将i=改成i=,问题解决charst;inttop=,i=;intj=;while(i《=&&j){if(exp==’(’){top++;st;}if(exp==’)’)if(st==’(’)top--;elsej=;i++;}if(top》)j=;returnj;若满意请及时采纳,谢谢

  ⒇定义的c是char不是char,所以只能输入单个字符,修改一下:charc,x;

您可能感兴趣的文章:

相关文章