当前位置:首页 > C++目录 > 正文内容

【数据结构】栈—括号匹配检验

亿万年的星光5年前 (2021-02-21)C++目录21548

【题目描述】

假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[  (  [  ] [  ] ) ] 等为正确的匹配,[  (  ]  )或 ([ ] ( )

或 (  ( ) ) )均为错误的匹配。

现在的问题是,要求检验一个给定的表示式中的括号是否正确匹配?

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出“OK”,不匹配就 输出“wrong”。输入一个字符串:

[  ( [ ] [  ] ) ], 输出OK。

【输入描述】

输入仅一行字符(字符个数小于255)

【输出描述】

匹配就输出“OK”,不匹配就输出“wrong”

【样例输入】

[ ( ] )

【样例输出】

wrong

【题目分析与思路】

  1. 从样例中可以看出,匹配规则是从最内部(实际操作可以看成是栈顶)开始匹配。

  2. 按类型匹配,“[” 一定匹配“]”,可以考虑压栈的时候针对于不同的符号进行压栈操作。

  3. 可以用1,2,3,4来分别代表上面的符号




#include<iostream>
#include<stack>
#include<cstring> 
using namespace std;
char str[1000];
stack<int> S;
int main() {
	cin>>str;
    int len=strlen(str);
    for(int i=0;i<len;i++)
    {
        if(str[i]=='(')//记录左圆括号
            S.push(1);
        else if(str[i]==')')//记录右圆括号
        {
            if(S.empty())//栈为空
                S.push(2);
            else if(S.top()==1)
                S.pop();
            else
                S.push(2);
        }
        else if(str[i]=='[')//记录左方括号
            S.push(3);
        else if(str[i]==']')//记录右方括号
        {
            if(S.empty())//栈为空
                S.push(4);
            else if(S.top()==3)
                S.pop();
            else
                S.push(4);
        }
    }
    if(S.empty())
        printf("OK");
    else
        printf("Wrong");
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    哈希表与哈希函数

    1. 哈希表(Hash Table)1.1 基本概念哈希表是一种通过哈希函数将键(key)映射到表中特定位置来访问记录的数据结构。它提供了平均时间复杂度为O(1)的查找、插入和删除操作。1.2 核心组...

    【数据结构】队列—基本概念

    【数据结构】队列—基本概念

    一、基本定义队列是一种先进先出的线性结构,简称FIFO结构。特点就是“先进先出”二、队列的相关概念队头与队尾:允许元素插入的一端称为队尾,允许元素删除的一端称为队头入队:队列的插入操作出队:队列的删除...

    图的访问与遍历-广度优先搜索

    对于无向图的广度优先搜索#include <iostream> #include <vector> #include <queue>...

    【数论】龟速乘

    【数论】龟速乘

    我们前面一篇文章学习了快速幂。它可以解决两类问题:a^b,(a^b)%c对于第一类,我们可以使用递归法或者迭代法可以求出,为了计算的快,我们可以引入位运算操作,但是目前来看,无论怎么优化都不能超过lo...

    【入门篇】C++ 中变量的简单使用

    【入门篇】C++ 中变量的简单使用

    1.什么是变量”变量“通俗来讲就是能变的量。在程序设计中,变量是一个个不同类型的盒子,当盒子里装了苹果时,盒子就代表苹果,当然,我们需要给一个个盒子起不同的名字。像下面的图片一样,一个盒子,给他取一个...

    信息学奥赛中文件流的写法

    信息学奥赛中文件流的写法

    头文件#include<cstdio>也可以用万能头格式如下:int main(){ freopen("xxxx.in","r",st...