读书人

使用栈解决括号匹配有关问题(初级)

发布时间: 2012-07-23 09:42:20 作者: rapoo

使用栈解决括号匹配问题(初级)
//只能匹配小括号一种类型
#include<stdio.h>
#include<stdlib.h>

struct stack
{
char *base;
char *top;
int stacksize;
};

void main()
{
struct stack S;
char kh;
char khp;

void InitStack(struct stack &S);
void Push(struct stack &S,char e);
void Pop(struct stack &S,char &e);
int StackEmpty(struct stack S);



InitStack(S);
printf("input a string:\n");
scanf("%c",&kh);
while(kh!='\n')
{
if(kh=='(')
Push(S,kh);
else if(kh==')')
{
if(StackEmpty(S)==1)
{
printf("Not Match\n");
exit(1);
}
else
Pop(S,khp);
}
else
{
printf("input illegal,program exited,please run again.\n"); //应该先检查输入的字符串是否含有非法字符(非()类)
exit(1);
}
scanf("%c",&kh);
}
if(StackEmpty(S)==1)
printf("Match\n");
else
printf("Not match\n");
}


void InitStack(struct stack &S) /*使用了引用*/
{
S.stacksize=100;
S.base=(char *)malloc(100*sizeof(char)); /*开辟连续内存空间有什么作用*/
S.top=S.base;
}


void Push(struct stack &S,char e)
{
*S.top=e;
S.top++;
}

void Pop(struct stack &S,char &e)
{
if(S.top==S.base)
printf("%s\n","ERROR");
S.top--;
e=*S.top;
}


//返回的值为1时栈为空,为0时不为空
int StackEmpty(struct stack S)
{
if(S.top==S.base)
return 1;
else
return 0;
}

[解决办法]
不是已经完成功能了么?如果你想修改为匹配多种括号的话就直接拓展嘛。比如多个{}类型的括号。遇到{就进栈,遇到}就得到栈顶元素,如果是{就匹配成功,再出栈;如果不是就匹配失败。直接退出循环了。
[解决办法]
代码太长,没看懂。
也没有弄清你是在提问,还是在展示自己的成果。
[解决办法]
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3

描述

现在,有一行括号序列,请你检查这行括号是否配对。

输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No


样例输入
3
[(])
(])
([[]()])


样例输出
No
No
Yes

读书人网 >C语言

热点推荐