C++中用栈来判断括号字符串匹配问题

     输入一个括号字符串,依次检验,若为左括号则则入栈,若为右括号则出栈一个字符判断是否与之相对应,在最后还需判断栈是否为空,如果不为空则不匹配。

首先回顾栈的基本知识:

    定义栈的结构体并初始化一个新栈:

struct stack
{
    char strstack[stacksize];
    int top;
};

void InitStack(stack &s)
{
    s.top=-1;
}

     出栈和入栈操作:

char Push(stack &s,char a)
{
    if(s.top==stacksize-1)
    {
        return 0;
    }
    s.top++;
    s.strstack[s.top]=a;
    return a;
}

char Pop(stack &s)
{
    if(s.top==-1)
    {
        return 0;
    }
    char a=s.strstack[s.top];
    s.top--;
    return a;
}

   判断栈是否为空:

int Empty(stack &s,int re)
{
    if(s.top==-1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

以上是栈的基本操作,定义一个栈和初始化一个新栈,出栈和入栈操作,以及判断栈是否为空的情况。接下来将写一个函数,检查字符串的每个字符,左括号则进行入栈操作,右括号则进行出栈操作看其是否匹配,最后判断是否为空以判定是否匹配。代码如下:

int Check(char *str)
{
    stack s;
    InitStack(s);
    int strn=strlen(str);
    for(int i=0;i<strn;i++)
    {
        char a=str[i];
        switch (a)
        {
        case '(':
        case '[':
        case '{':
            Push(s,a);
            break;
        case ')':
            if(Pop(s)!='(')
            {
                return 0;
            }
            break;
        case ']':
            if(Pop(s)!='[')
            {
                return 0;
            }
            break;
        case '}':
            if(Pop(s)!='{')
            {
                return 0;
            }
            break;
        }
    }
    int re=0;
    re=Empty(s,re);
    if(re==1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

   自此,括号字符串匹配的判断问题已经解决,下面贴出完整的经过编译运行过的代码。

View Code
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

#define stacksize 100

struct stack
{
    char strstack[stacksize];
    int top;
};

void InitStack(stack &s)
{
    s.top=-1;
}

char Push(stack &s,char a)
{
    if(s.top==stacksize-1)
    {
        return 0;
    }
    s.top++;
    s.strstack[s.top]=a;
    return a;
}

char Pop(stack &s)
{
    if(s.top==-1)
    {
        return 0;
    }
    char a=s.strstack[s.top];
    s.top--;
    return a;
}

int Empty(stack &s,int re)
{
    if(s.top==-1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int Check(char *str)
{
    stack s;
    InitStack(s);
    int strn=strlen(str);
    for(int i=0;i<strn;i++)
    {
        char a=str[i];
        switch (a)
        {
        case '(':
        case '[':
        case '{':
            Push(s,a);
            break;
        case ')':
            if(Pop(s)!='(')
            {
                return 0;
            }
            break;
        case ']':
            if(Pop(s)!='[')
            {
                return 0;
            }
            break;
        case '}':
            if(Pop(s)!='{')
            {
                return 0;
            }
            break;
        }
    }
    int re=0;
    re=Empty(s,re);
    if(re==1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
void main()
{
    char str[100];
    cout<<"请输入一个长度小于100的字符串:"<<endl;
    cin>>str;
    int re=Check(str);
    if(re==1)
    {
        cout<<"你输入的字符串括号完全匹配!"<<endl;
    }
    else if(re==0)
    {
        cout<<"你输入的字符串括号不匹配!"<<endl;
    }
}

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/ysyn/archive/2012/09/26/2703235.html

利用实现括号匹配 c++ 对于一个括号的序列,例如 {[()]} ,当我们从左向右遍历时,如果要确定右括号所对应的左括号是否存在,就需要将左括号记录下来,并且要做到最先记录的符号的最后被匹配,那么最合适的数据结构就是了。 算法过程 遇到一个左括号,进 遇到一个右括号判断其与顶元素是否匹配,如果不匹配,则返回0标识失败 当遇到’ \0’ 时遍历完括号串,这个时候判断是否为空,非空返回0,空返回1标识成功 代码 ... 阅读详情

相关推荐

C++题解】括号(括弧)匹配问题综合

假设一个表达式有英文字母(小写)、运算符($+$,$—$,$\times$,$÷$)和左右小(圆)括号构成,假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如$([]())$或$[([][])]$等为正确的匹配,$[(])$或$([]()$或$(())))$均为错误的匹配字符串中只含有括号$()$ ,$[]$ ,$$,$\{\}$ ,判断输入的字符串括号是否匹配。 如果括号有互相包含的形式,从内到外必须是$()$ ,$[]$ ,$$,$\{\}$给你一个括号序列,其中有圆括号$

szxguagua0807的博客 4813

用顺序判断表达式中括号是否匹配正确

《数据结构,算法及应用》 zhangxianchao P80 13题

运用之括号匹配

的定义及存储 只能在固定一端进行插入和删除操作的线性结构。进行插入删除操作的一端称为顶,另一端称为底,插入数据的操作称为压,删除数据的操作称为出的储存结构有顺序和链链两种。 顺序和顺序表基本一样,不同的是顺序只能固定在顶进行操作。顺序除了单个外还有共享,所谓共享就是两个共用一快储存空间,当然共享一般用于两个空间需求相反的

xuzhangze的博客 8174

c++使用堆实现括号匹配问题

c++使用堆实现括号匹配问题

c++的应用——括号比较和配对

c++括号比较和配对

tgmhh的博客 2215

深入浅出检查括号匹配性()(C++)

1)检查括号匹配性 若有字符串为"({}<>)({})"则符合匹配性(一个正括一定有一个反括号,嵌套在括号中的括号也必须进行判断) 2)不符合匹配性的情况 “><(}{)["不符合匹配性(先出现反括号再出现正括号,或嵌套在正括号种存在不匹配括号等) 3)思路 例如 "( { })" 第一个字符是 '(' ,所以压入,此时不为空。 第二个字符是 '{' ,所以再次压入。 第三个字符是 '}' ,不为空,所以弹出的第一个元素 '{'。 第四个字符是.

weixin_55037029的博客 883

20. 有效的括号

题目: 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串判断字符串是否有效。 有效字符串需满足: 1.左括号必须用相同类型的右括号闭合。 2.左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 题解思路: 是后进先出得数据结构,可以在顶进行弹出和插入,所以对于括号类题目用(stack)比较合适。 下面举例说明三种情况不匹配: 1)左括号多了 ((){} 遍历完字符串不为空,发现里面(存的是右括号)没有字符串相应的右括号匹配,即有相应的左括号没有右括号

chenmi123321的博客 571

C++顺序解决括号匹配问题

简介:判断一个只包含:“{”、“[”、“(”、“)”、“]”、“}”括号的表达式中括号是否匹配,即从终端输入一个只包含以上几种括号字符串判断字符串中的括号是否匹配。要求:如该括号是左括号,则入,如果是右括号,则检测该括号是否括号匹配匹配前需要先判断是否存在元素,如果有则用当前括号顶的括号比较,如果匹配则继续遍历,否则返回匹配失败。

z020729的博客 3090

C++程序分享--常见算法/编程面试题:给定一个字符串,使用实现括号匹配检查

------------------------------------正文----------------------------------------关注我,持续分享逻辑思维&管理思维;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;,它接受一个字符串表达式,然后使用检查括号是否匹配。如果所有的括号都正确匹配,那么函数返回。有意找工作的同学,请参考博主的原创:《函数中,它读取表达式并输出匹配结果。

借雨醉东风的博客 419

c语言判断字符串括号是否匹配,C++中用判断括号字符串匹配问题的实现方法...

本文实例主要实现:输入一个括号字符串,依次检验,若为左括号则入,若为右括号则出一个字符判断是否与之相对应,在最后还需判断是否为空,如果不为空则不匹配。首先回顾的基本知识:1.定义的结构体并初始化一个新:struct stack{char strstack[stacksize];int top;};void InitStack(stack &s){s.top=-1;}2.出和入...

weixin_34024555的博客 995

字符串括号是否配对php,C++_C++中用判断括号字符串匹配问题的实现方法,本文实例主要实现:输入一个 - phpStudy...

C++中用判断括号字符串匹配问题的实现方法本文实例主要实现:输入一个括号字符串,依次检验,若为左括号则入,若为右括号则出一个字符判断是否与之相对应,在最后还需判断是否为空,如果不为空则不匹配。首先回顾的基本知识:1.定义的结构体并初始化一个新:struct stack{char strstack[stacksize];int top;};void InitStack(stack &...

weixin_42515364的博客 181

括号配对的小程序c++

课后的作业。可以直接提交。遇到左括号,遇到右括号判断然后出

实现的括号匹配

c++ 语言实现的括号匹配程序,利用实现

括号配对问题

括号配对问题C++,C++语言括号匹配问题解决方法,给定一个输入的字符串,包含括号(和),能够找出(和)的个数,并指出(或者)不正确的位置。

括号配对问题C++

题目描述: 现在,有一行括号序列,请你检查这行括号是否配对。 输入描述: 第一行输入一个数N(0&lt;N&lt;=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符 输出描述: 每组输入数据的输出占一行,如果该字符串中所含的括号配对...

beyond谚语的博客 9425

实现括号匹配问题

结构具有后进先出的特点。括号匹配问题描述:若表达式中包含三种括号:圆括号、方括号和花括号,它们可以相互嵌套。 算法思想:检验算法中可设置一个,每读入一个括号,若是左括号,则直接进,等待相匹配的同类右括号;若读入的是右括号,且与当前顶左括号同类型,则二者匹配,将顶的左括号弹出,否则属于不合法情况。另外。如果输入序列已经读完,而中仍有等待匹配的左括号,或者读入一个右括号,而中已无等待匹...

团子7号 7540

LeetCode刷题——括号匹配问题

前言:这次介绍一道用C语言刷题很难受的一题,主要用到“”的思想。 1.括号匹配问题 OJ链接 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 思路分析: 由于结构的特殊性,非常适合做对称匹配类的题目。 首先要弄清楚,字符串里的括号匹配有几种情况。 先来分析一下 这里有三种不匹配的情况: , 第一种情况,字符串里左方向的括号多余了 ,所以不匹配。 第二

林慢慢的博客 6383

【每日一题】C++ 中使用实现括号匹配

在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时。(Stack)是一种非常适合处理此类问题的数据结构,因为具有“后进先出(LIFO)”的特性,能够精确地管理括号匹配问题

XuanRan的博客 4205
上一篇: 数据库表转换为xml格式,excel转换为xml格式文件
下一篇: excel导入数据库
aq8008
博客等级 码龄12年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值