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

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

#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
快速回复:求助!括号匹配问题!
数据加载中...
 
   



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

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