c语言判断字符串括号是否匹配,C++中用栈来判断括号字符串匹配问题的实现方法...

本文实例主要实现:输入一个括号字符串,依次检验,若为左括号则入栈,若为右括号则出栈一个字符判断是否与之相对应,在最后还需判断栈是否为空,如果不为空则不匹配。

首先回顾栈的基本知识:

1.定义栈的结构体并初始化一个新栈:

struct stack

{

char strstack[stacksize];

int top;

};

void InitStack(stack &s)

{

s.top=-1;

}

2.出栈和入栈操作:

char Push(stack &s,char a)

{

if(s.top==stacksize-1)

{

return 0;

}

s.top++;

s.strstack[s.top]=a;

return a;

}

char Pop(stack &s)

{

if(s.top==-1)

{

return 0;

}

char a=s.strstack[s.top];

s.top--;

return a;

}

3.判断栈是否为空:

int Empty(stack &s,int re)

{

if(s.top==-1)

{

return 1;

}

else

{

return 0;

}

}

以上是栈的基本操作,定义一个栈和初始化一个新栈,出栈和入栈操作,以及判断栈是否为空的情况。接下来将写一个函数,检查字符串的每个字符,左括号则进行入栈操作,右括号则进行出栈操作看其是否匹配,最后判断是否为空以判定是否匹配。

主要功能代码如下:

int Check(char *str)

{

stack s;

InitStack(s);

int strn=strlen(str);

for(int i=0;i

{

char a=str[i];

switch (a)

{

case '(':

case '[':

case '{':

Push(s,a);

break;

case ')':

if(Pop(s)!='(')

{

return 0;

}

break;

case ']':

if(Pop(s)!='[')

{

return 0;

}

break;

case '}':

if(Pop(s)!='{')

{

return 0;

}

break;

}

}

int re=0;

re=Empty(s,re);

if(re==1)

{

return 1;

}

else

{

return 0;

}

}

自此,括号字符串匹配的判断问题已经解决,下面贴出完整的经过编译运行过的代码。

完整实例代码如下:

#include

#include

#include

using namespace std;

#define stacksize 100

struct stack

{

char strstack[stacksize];

int top;

};

void InitStack(stack &s)

{

s.top=-1;

}

char Push(stack &s,char a)

{

if(s.top==stacksize-1)

{

return 0;

}

s.top++;

s.strstack[s.top]=a;

return a;

}

char Pop(stack &s)

{

if(s.top==-1)

{

return 0;

}

char a=s.strstack[s.top];

s.top--;

return a;

}

int Empty(stack &s,int re)

{

if(s.top==-1)

{

return 1;

}

else

{

return 0;

}

}

int Check(char *str)

{

stack s;

InitStack(s);

int strn=strlen(str);

for(int i=0;i

{

char a=str[i];

switch (a)

{

case '(':

case '[':

case '{':

Push(s,a);

break;

case ')':

if(Pop(s)!='(')

{

return 0;

}

break;

case ']':

if(Pop(s)!='[')

{

return 0;

}

break;

case '}':

if(Pop(s)!='{')

{

return 0;

}

break;

}

}

int re=0;

re=Empty(s,re);

if(re==1)

{

return 1;

}

else

{

return 0;

}

}

void main()

{

char str[100];

cout<

cin>>str;

int re=Check(str);

if(re==1)

{

cout<

}

else if(re==0)

{

cout<

}

}

希望本文所述实例对大家C++算法设计的学习有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值