利用栈实现字符串中三种括号的匹配问题c++语言实现
编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0。
Head.h:
#ifndef HEAD_H_INCLUDED
#define HEAD_H_INCLUDED
#include<iostream>
struct LinkedNode
{
int data;
LinkedNode*next;
};
class LinkedStack//链式栈的类定义
{
public:
LinkedStack();
~LinkedStack(){makeEmpty();};
void Push(LinkedNode &);
int Pop();
bool getTop(LinkedNode&x)const;
bool IsEmpty()const{return (top==NULL)?true:false;}
int getSize()const;
void makeEmpty();
void print();
private:
LinkedNode *top;
};
#endif // HEAD_H_INCLUDED
Methods.cpp:
#include"head.h"
#include<iostream>
using namespace std;
LinkedStack::LinkedStack(){top=NULL;}
void LinkedStack::makeEmpty()
{
LinkedNode*p;
while(top!=NULL)
{
p=top;top=top->next;delete p;
}
}
void LinkedStack::Push(LinkedNode &x)
{
LinkedNode *p=top;
x.next=p;
top=&x;
}
int LinkedStack::Pop()
{int data=top->data;
LinkedNode*p=top;
top=top->next;
delete p;
return data;
}
bool LinkedStack::getTop(LinkedNode&x)const
{
if(IsEmpty()==true)return false;
x=*top;
return true;
}
int LinkedStack::getSize()const
{
int k=0;
LinkedNode*p=top;
while(p!=NULL){p=p->next;k++;}
return k;
}
void LinkedStack::print()
{
cout<<"栈中元素个数="<<getSize()<<endl;
LinkedNode*p=top;int i=0;
while(p!=NULL)
{
cout<<++i<<":"<<p->data<<endl;
p=p->next;
}
}
Main.cpp:
#include"head.h"
#include <iostream>
#include<string.h>
using namespace std;
//所要求的判断括号匹配的算法
void PrintMatchedPairs(char *expression)
{
LinkedStack s1;LinkedStack s2;LinkedStack s3;
int j,length=strlen(expression);
cout<<"对于小括号()的情况:"<<endl;
for(int i=1;i<=length;i++)
{
if(expression[i-1]=='('){LinkedNode t;t.data=i;s1.Push(t);}//左括号,位置进栈
else if(expression[i-1]==')')
{
if(s1.IsEmpty()==false){j=s1.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;}
else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl;
}
}
while(s1.IsEmpty()==false)
{
j=s1.Pop();
cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl;
}
cout<<"对于中括号[]的情况:"<<endl;
for(int i=1;i<=length;i++)
{
if(expression[i-1]=='['){LinkedNode t;t.data=i;s2.Push(t);}//左括号,位置进栈
else if(expression[i-1]==']')
{
if(s2.IsEmpty()==false){j=s2.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;}
else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl;
}
}
while(s2.IsEmpty()==false)
{
j=s2.Pop();
cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl;
}
cout<<"对于大括号{}的情况:"<<endl;
for(int i=1;i<=length;i++)
{
if(expression[i-1]=='{'){LinkedNode t;t.data=i;s3.Push(t);}//左括号,位置进栈
else if(expression[i-1]=='}')
{
if(s3.IsEmpty()==false){j=s3.Pop();cout<<j<<"与"<<i<<"匹配"<<endl;}
else cout<<"没有与第"<<i<<"个右括号匹配的左括号!"<<endl;
}
}
while(s3.IsEmpty()==false)
{
j=s3.Pop();
cout<<"没有与第"<<j<<"个括号相匹配的右括号!"<<endl;
}
}
int main()
{
char s[100];
cout<<"请输入要判断的带有三种括号的字符串"<<endl;
cin>>s;
PrintMatchedPairs(s);
return 0;
}
运行结果:
利用栈实现字符串中三种括号的匹配问题c++语言实现的更多相关文章
- web.xml中三种通配符及匹配规则
一.url-pattern的三种写法 1.精确匹配.以”/”开头,加上servlet名称: /ad ; 2.路径匹配.以”/”开头,加上通配符”*” : /* ; 3.扩展名匹配.以通 ...
- JavaScript中三种字符串连接方式及其性能比较
参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...
- 彻底了解构建 JSON 字符串的三种方式
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7701856.html 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax ...
- Spring中三种配置Bean的方式
Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...
- Android中三种超实用的滑屏方式汇总(转载)
Android中三种超实用的滑屏方式汇总 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...
- 转:VMware中三种网络连接的区别
转自:http://www.cnblogs.com/rainman/archive/2013/05/06/3063925.html VMware中三种网络连接的区别 1.概述 2.bridged( ...
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- C#中三种定时器对象的比较
·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...
- 转-Web Service中三种发送接受协议SOAP、http get、http post
原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...
随机推荐
- 购物车以php原生cookie实现
index.php //入口文件 <?php /** * @name index.php * @decs * @author 老猫 <18368091722@163.com> * U ...
- Win32汇编语言语法基础
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地 ...
- lua加载DLL
.cpp //若没有在项目属性--库文件.依赖文件.包含添加.则添加一下路径 #pragma comment (lib,"lua5.1.lib") #include " ...
- Unity鼠标移动到物体上显示信息
相信大家玩游戏的时候,鼠标移动到游戏装备上,都会显示装备的的具体信息,那么接下来就写代码把,废话不多说. 下面是 效果图 鼠标移动到装备位置显示的信息,鼠标移动不在装备区域后不现实信息,下面是代码 : ...
- MongoDB 基础增删改查
增删改查 基础操作 use show dbs show collections db[当前所在数据库] 插入文档 db.collection.insert() db.collection.insert ...
- S=a+aa+aaa...(js)
/*求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.*/ let readline = ...
- Python实现读取Excel文档中的配置并下载软件包
问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...
- fastadmin 隐藏操作栏按钮
formatter: function (value, row, index) { var that = $.extend({}, this); $(table).data({"operat ...
- pandas中的Series
我们使用pandas经常会用到其下面的一个类:Series,那么这个类都有哪些方法呢?另外Series和DataFrame都继承了NDFrame这个类,df.to_sql()这个方法其实就是NDFra ...
- 分析bug是前端还是后端的
如何分析一个bug是前端还是后端的? 平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug 这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数 ...