良好格式序列的判断

发布于 2023-04-12 23:19:15 字数 1478 浏览 82 评论 0

写一个程序,它读入若干括号字符(有方括号、大括号、圆括号、尖括号、等)的一个序列,并确定该序列是否为良好格式序列。比如 { [ ( ) ( ) ] < ( ( ) ( ) ) > } 是良好格式序列;而 { ( ( < > ) ( ) ) [ ( ) } } 不是良好格式序列。(利用栈结构来实现判断)

分析:对括号序列自左至右地进行扫描,用一个栈存放所扫描到的括号,若扫描到开括号 ‘{’, ‘[’, ‘<’, ‘(’ 时,则让其进栈;若扫描到开括号 ‘}’, ‘]’, ‘>’, ‘)’ 时,则检查栈顶元素是否与它匹配,若匹配,则退出栈顶元素;若不匹配,则输出不匹配的信息。若到扫描完毕时,栈已退空,则括号序列是良好的格式序列。

源程序如下:

#include <iostream.h>
#define max 100  // 栈的深度
char a[max];     // 栈
int  top;        // 栈顶指针
int  good;       // 判断的结果
int  match(char x,char y)
{
	int result=0;
	switch(x){
	    case '{': if(y=='}')
					  result=1;
		          break;
		case '[': if(y==']')
					  result=1;
			      break;
		case '(': if(y==')')
					  result=1;
			      break;
		case '<': if(y=='>')
					  result=1;
			      break;
	}
	return result;
}
void push(char x)  // 出栈操作
{
	top++;
	a[top]=x;
}
void pop(char x)   // 退栈操作
{
	if(!match(a[top],x))
		good=0;
	else 
		top--;
}
void main(void)
{
	char ch;
	top=0;
	good=1;
	cout<<"Please input character string (use 'e' to denote the end of string):"<<endl;
	cin>>ch;
	while((ch!='e')&&good){
		if((ch=='{')||(ch=='[')||(ch=='(')||(ch=='<'))
			push(ch);
		else
			if((ch=='}')||(ch==']')||(ch==')')||(ch=='>'))
				pop(ch);
		cin>>ch;
	}
	if(good)
		cout<<"Good!"<<endl;
	else 
		cout<<"Not Good!"<<endl;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

冷情

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文