| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 811 人关注过本帖
标题:求助!括号匹配问题!
只看楼主 加入收藏
未来的梦
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2006-3-23
收藏
 问题点数:0 回复次数:3 
求助!括号匹配问题!

//括号匹配是否匹配
//如: ([]()) 或 [([][])]等为正确格式,[(]) 或 ([()) 或 (()]均为不正确格式

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INIT_STACK_SIZE 80
#define STACKINCREMENT 10
#define MAX 50
typedef struct{
char *elem;
int top;
int stacksize;
}SqStack;
SqStack S; //将栈设置为全局变量

void Init(SqStack S);
int Process(SqStack S,char expression[],int len);
void Push(SqStack S,char e);
int Detect(SqStack S);
void Pop(SqStack S);

int main(void)
{
char expression[50];
int len;

printf("Please input string:");
scanf("%s",expression); //读取括号
len=strlen(expression);
Init(S);
if(Process(S,expression,len)) //检测括号是否配对情况
printf("Success.\n");
else
printf("Failure.\n");

return 0;
}

void Init(SqStack S) //栈初始化
{
if((S.elem=(char *)malloc(INIT_STACK_SIZE * sizeof(char)))==NULL)
{
exit(1);
}
S.top=0;
S.stacksize=INIT_STACK_SIZE;
}

int Process(SqStack S,char expression[],int len)
{
int i,flag;

flag=1; //设置个标志
for(i=0;i<=len-1;i++)
{
switch(expression[i])
{
case '(': //如果是左侧括号就压入栈
Push(S,expression[i]);
break;
case '[':
Push(S,expression[i]);
break;
case '{':
Push(S,expression[i]);
break;
case ')': //Detect()的功能是检测栈是否为空
if(Detect(S) && (S.elem[S.top-1]=='('))
Pop(S); //Pop()的功能是栈顶元素出栈
else
{
flag=0;
return flag;
}
break;
case ']':
if(Detect(S) && (S.elem[S.top-1]=='['))
Pop(S);
else
{
flag=0;
return flag;
}
break;
case '}':
if(Detect(S) && (S.elem[S.top-1]=='{'))
Pop(S);
else
{
flag=0;
return flag;
}
break;
}//switch
}//for

return flag; //将标志的结果返回到main()
}

void Push(SqStack S,char e) //入栈
{
char *newbase;

S.elem[S.top++]=e;
if(S.top>=S.stacksize)
{
if((newbase=(char *)realloc(S.elem,(S.stacksize + STACKINCREMENT) * sizeof(char)))==NULL)
{
exit(1);
}
S.elem=newbase;
S.stacksize+=STACKINCREMENT;
}
}

int Detect(SqStack S) //检测栈是否为空函数
{
int flag=1;

if(S.top==0)
flag=0;

return flag;
}

void Pop(SqStack S) //Pop()功能是栈顶元素初栈
{
S.top=S.top-1;
}

以上程序为什么不能实现?请指教!

搜索更多相关主题的帖子: 括号 
2006-03-24 08:15
sunnvya
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1094
专家分:0
注 册:2005-11-23
收藏
得分:0 
void Pop(SqStack S) //Pop()功能是栈顶元素初栈
{
S.top=S.top-1;
}
这个出栈你不要把栈顶元素给记录吗?加个char &e!

http://www. 第二站>>>提供源码下载
2006-03-25 10:31
meng136138
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-2-15
收藏
得分:0 

好象这个知识一个算法了
运行 不得

2006-04-04 19:11
hexquan
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2006-5-25
收藏
得分:0 
#define maxsize 200
typedef struct stack{
char stack[maxsize];
int top;}stack;
int match(char *str)
{stack s;int i=0;s.top=-1; for(i=0;i<4;i++) printf("%c",str[i]);
i=0; while(i<=4){
switch(str[i]){
case '(' : s.stack[++s.top]='(';
i++;
break;
case '[' : s.stack[++s.top]='[';
i++;
break;
case ')' : if(s.top<0) return 0;
else if(s.stack[s.top]=='(') s.top--;
else return 0;
i++;
break;
case ']' : if(s.top<0) return 0;
else if(s.stack[s.top]==']') s.top--;
else return 0;
i++;
break;
default :i++;} }
printf("i=%d\n",i);
if(s.top>=0) return 0;
else return 1;
}
main()
{char str[4];int j,m;
for(j=0;j<4;j++) scanf("%c",&str[j]);
m=match(str);
if(m==0) printf("bu pibei");
else printf("bipei");
}

2006-06-15 19:56
快速回复:求助!括号匹配问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021992 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved