编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回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++语言实现的更多相关文章

  1. web.xml中三种通配符及匹配规则

    一.url-pattern的三种写法 1.精确匹配.以”/”开头,加上servlet名称:    /ad  ; 2.路径匹配.以”/”开头,加上通配符”*” :    /*  ; 3.扩展名匹配.以通 ...

  2. JavaScript中三种字符串连接方式及其性能比较

    参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...

  3. 彻底了解构建 JSON 字符串的三种方式

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7701856.html 前言:JSON 是轻量级的数据交换格式,很常用,尤其是在使用 Ajax ...

  4. Spring中三种配置Bean的方式

    Spring中三种配置Bean的方式分别是: 基于XML的配置方式 基于注解的配置方式 基于Java类的配置方式 一.基于XML的配置 这个很简单,所以如何使用就略掉. 二.基于注解的配置 Sprin ...

  5. Android中三种超实用的滑屏方式汇总(转载)

    Android中三种超实用的滑屏方式汇总   现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习惯性的有事没事的左右滑屏,也不知道在干什么...嘿嘿),由于 ...

  6. 转:VMware中三种网络连接的区别

    转自:http://www.cnblogs.com/rainman/archive/2013/05/06/3063925.html VMware中三种网络连接的区别   1.概述 2.bridged( ...

  7. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  8. C#中三种定时器对象的比较

    ·关于C#中timer类 在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threading.Timer类里3.定义在System.Timers ...

  9. 转-Web Service中三种发送接受协议SOAP、http get、http post

    原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...

随机推荐

  1. python不同编码方式对应所占字节数

    不同编码方式对应所占字节数 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制. ...

  2. Python基础『二』

    目录 语句,表达式 赋值语句 打印语句 分支语句 循环语句 函数 函数的作用 函数的三要素 函数定义 DEF语句 RETURN语句 函数调用 作用域 闭包 递归函数 匿名函数 迭代 语句,表达式 赋值 ...

  3. winform中如何使用确认对话框

    在系统中,常需要这样的功能,让用户确认一些信息:如下图: [退出系统]按钮关键代码如下: private void btnExit_Click(object sender, EventArgs e) ...

  4. 合并两个排序链表——牛客offer

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解题思路: 1.一般看到合并这类的题目就会很自然的想到创建一个新的链表,然后将两个链表根据一定 ...

  5. luogu P2765 魔术球问题 (最小路径覆盖)

    大意:给定n根柱子, 依次放入1,2,3,...的球, 同一根柱子相邻两个球和为完全平方数, 求最多放多少个球. 对和为平方数的点连边, 就相当于求DAG上最小路径覆盖. #include <i ...

  6. 项目实践 hrm项目的设计过程

    人事管理系统的设计过程 一.数据库表和持久化类 1.1   进行需求分析,根据功能模块设计数据库表 1.2   设计持久化实体 面向对象分析,即根据系统需求提取出应用中的对象,将这些对象抽象成类,再抽 ...

  7. 关于学习电信nb-iot的小结

    关于这几天对nb-iot的学习的总结和遇到的坑 初步学习nb-iot,了解到了nb-iot对于传感器数据传输功能的强大: 废话不多说,对于nb-iot我们选择的有人的模块,选择B5频段也就是电信的nb ...

  8. IPC之mqueue.c源码解读

    队列的意思应该大家都清楚,不过还有有一些细节的地方不知道,下面是一个队列的源码,因该说这是队列的一部分,不是全部.而且是linux中队列,其他各种OS中队列大同小异. /* * POSIX messa ...

  9. Windows Server 2016分层式存储,使用PowerShell修改底层介质类型

    新部署的备份服务器,需要做分层式存储,按照网上最常见一个作者叫刘兵的文档,名叫<Windows Server2016分层存储技术详细拆解手册>,做到使用PowerShell修改磁盘的Med ...

  10. qunee 流动的关系

    <!DOCTYPE html> <html> <head> <title>Hello Qunee for HTML5</title> < ...