| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:括号匹配问题[有错]
只看楼主 加入收藏
cy51161952
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-28
收藏
 问题点数:0 回复次数:0 
括号匹配问题[有错]
#include<iostream.h>
#include<stdlib.h>
#include<malloc.h>
const int MaxSize=100;
const int increment=10;
struct SqStack{//建立栈的结构体
int *base;
int *top;
int stacksize;
};
bool InitStack(SqStack &S,int ms){//初始化栈
S.base=(int *)malloc(MaxSize*sizeof(int));
if(!S.base) return false;
S.top=S.base;
S.stacksize=ms;
return true;
}
bool Push(SqStack &S,int e){//压栈
if(S.top-S.base>=MaxSize){
S.base=(int *)realloc(S.base,(S.stacksize+increment)*sizeof(int));
if(!S.base) return false;
S.top=S.base+S.stacksize;
S.stacksize+=increment;
}
*S.top++=e;
return true;
}
int Pop(SqStack &S){//出栈
if(S.top==S.base) return 0;
int e=*--S.top;
return e;
}
bool StackEmpty(SqStack S){//判断栈是否是空
if(S.top==S.base){
return true;
}
return false;
}
int GetTop(SqStack S){//读栈顶元素
if(S.top==S.base) return false;
char e=*(S.top-1);
return e;
}
bool correct(SqStack &R){//括号匹配的程序
char exp[81];//exp[]存放键盘输入元素
InitStack(R,10);
cout<<"輸入6個字符:";
cin.getline(exp,10);//扫描键盘输入元素
int i=0;
while(exp[i]){
char ch=exp[i];
i++;
switch(ch){
case'{':
case'[':
case'(':
Push(R,ch);//遇到任意作括弧,进栈
break;
case'}'://遇到右括弧,判断是否匹配
if(!StackEmpty(R)&&GetTop(R)=='{')
Pop(R);
else
return false;//不匹配,返回false
break;
case']':
if(!StackEmpty(R)&&GetTop(R)=='[')
Pop(R);
else return false;
break;
case')':
if(!StackEmpty(R)&&GetTop(R)=='(')
Pop(R);
else return false;
}
}
if(StackEmpty(R)) return true;//判断栈空,空则说明全部匹配
else return false;
}
void main(){ SqStack W;
correct(W);
}
搜索更多相关主题的帖子: 括号 
2007-07-08 23:42
快速回复:括号匹配问题[有错]
数据加载中...
 
   



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

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