c语言 想要输入一个括号,编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号....

编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号.以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

d04740fbf2d0b4bab0cf427c404a2d45.png

编写一个C++程式,解决括号匹配问题,即匹配一个字串中的左右括号.

#include using namespace std;#define STACK_INT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0typedef char SElemType;typedef int Status;typedef struct { SElemType *base; SElemType *; int stacksize;}SQStack;Status INitStack(SQStack &S){ S.base=new SElemType[STACK_INT_SIZE]; if(!S.base) { cout<=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) { cout<>e; if(e!='('&&e!=')'&&e!='['&&e!=']'&&e!='{'&&e!='}') { cout<

如何用c语言编写一个括号匹配程式

#include

void main()

{

int Token = 0;

char s[50];

bool IsRight = false;

cout<

cin>>s;

for(int i = 0;s[i]!='\0';i++)

{

if(s[i]=='('){

Token++;

}

if(s[i]==')'){

Token--;

if(Token<0)

break;

}

}

if(Token!=0)

cout<

else

cout<

cout<

}

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

int Match(char *exp,int n)

{

int i=0;

char e;

SqStack *st;

InitStack(st);

while(i

{

if(exp[i]=='(')

push(st,exp[i]);

else if(exp[i]==')')

{

if(GetTop(st,e)==1)

{

if(e!='(')

return 0;

else

Pop(st,e);

}

else

return 0;

}

i++;

}

if(StackEmpty(st)==1)

return 1;

else

return 0;

}

急!括号匹配问题

你用了exit和malloc函式

需要新增标头档案

#include

试过了,新增标头档案后没有编译错误。

函式的 栈引数 都改成 栈指标引数

如:

int initstack(sqstack S);

改成:

int initstack(sqstack *S);

函式体也要做相应修改。

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

#include

#include

const int maxsize=100;最大元素个数

typedef char Datatype;

class seqstack

{

int ;

Datatype *s;

public:

seqstack();建构函式

~seqstack();解构函式

void push(Datatype x);

void match(char *k);

};

seqstack temp;

seqstack::seqstack()

{

=0;

s=new Datatype[maxsize];

}

seqstack::~seqstack()

{

delete []s;

}

void seqstack::push(Datatype x)

{

if(==maxsize)

{

cout<

exit(0);

}

else

{

s[]=x;

}

}

bool ma(char a,char b)

{

if((a=='('&&b==')')||(a=='['&&b==']')||(a=='{'&&b=='}'))

return true;

else

return false;

}

void seqstack::match(char *k)

{

int u,v;

for(int i=0;k[i]!='\0';i++)

{

if(k[i]=='('||')'||'['||']'||'{'||'}')

{

temp.push(k[i]);

++;

}

}

if(%2==1)

{

cout<

}

else

{

u=/2;

v=u+1;

while(u!=-1)

{

if(ma(s[u],s[v]))

{

u--;

v++;

}

else

{

cout<

break;

}

}

if(u==-1)

cout<

}

}

void main()

{

char p[10];

cout<

cin>>p;

temp.match(p);

} 只是修改编译错误吗? 我改好了 ,还修改了个死回圈 ,你少了一边大括号,还有case那加上了break

c++ 如何在档案中匹配一个字串

如果档案不是太大(比你当前的可用剩余记忆体小),且档案中不包含“0”这样的位元组,直接把档案用一个缓冲调进记忆体,然后用字串搜寻函式搜就是了;

如果档案确实太大,或者档案中可能包含“0”这样的位元组,那么你需要自己编写模式匹配函式(就是与字串搜寻函式类似功能的函式,网上有类似的C++原始码,但功能还不够)。

对含0资料的适应比较简单,搜寻函式只要额外加两个缓冲区资料长度的引数传进去就行(代替以0结尾的字串处理机制)——一个主缓冲长度,一个子串长度。

而跨缓冲区的搜寻比较麻烦,因为搜寻字很可能跨在两个相邻缓冲之间,这时搜寻函式需要返回两个资讯:一是搜寻到的子串位置,二是本缓冲区内匹配了多少位元组的子串(完全匹配时就是匹配了整个子串的长度);如果需要多次搜寻子串在缓冲中的所有位置,则还需要把搜寻起始位置做引数传进搜寻函式。当然,这时子串在缓冲中搜索到的各位置必须转换为档案的绝对座标才行。

跨缓冲区的搜寻,上一缓冲的最后搜寻结果(位置、已匹配长度)要带进下一缓冲的搜寻,这些必要资讯也要传进搜寻函式,因此这是个复杂而引数众多的函式。

括号匹配问题(pascal)

const

op1='{[

op2='}]>)';

var

s:array[1..1000] of char;

,p1,p2,l,i:longint;

st:string;

ch:char;bj:boolean;

begin

readln(st);

:=0;l:=length(st);

bj:=true;

for i:=1 to l do begin

ch:=st[i];

if pos(ch,op1)<>0 then begin

inc();s[]:=ch;

end

else if pos(ch,op2)<>0 then begin

if =0 then begin bj:=false;break;end

else begin

p2:=pos(ch,op2);

ch:=s[];

p1:=pos(ch,op1);

if p1=p2 then dec()

else begin bj:=false;break;end;

end;

end;

end;

if =0 and bj then writeln('yes')

else writeln('no');

end.

C语言括号匹配问题

用堆叠解决。

C圆括号匹配程式问题

这程式码也太多了。。LZ你可以到我空间里参考“括号匹配”这篇文章,之前给一个提问者写的。不一定是你想要的功能,但你可以按那个思路来改。

帮忙改一下这个C++括号匹配问题

#include

#include

using namespace std;

bool invalid(char* s)

{

stack st;

st.empty();

while(*s!='\0')

{

if(*s == '['|| *s == '(')

st.push(*s);

else

{

if(*s == ']')

{

if(st.() != '[')

{

return true;

}

else

st.pop();

}

if(*s == ')')

{

if(st.()!='(')

{

return true;

}

else

st.pop();

}

}

s++;

}

return !st.empty();

}

int main()

{

int i;

char a[50];

cin>>a;

if(invalid(a))

cout<

else

cout<

cin>>i;

return 0;

}

分页:

1

23

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值