欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

stack 括号匹配——C++

程序员文章站 2022-04-22 12:16:52
先写一下我的心得,也许可能是废话啊?今天好好的了解了一下C++的代码风格,原来挺简单的。只不过自己使用C语言太长时间了,一时无法接受而已,其实使用C++的人还不少,这是一种面向对象的程序设计语言,却又不像Java那样高级,虽然学校把这一门课程删除了,但是还是有很多人在自学了(居然学的那么好),我也不能忒low了,什么也不会,以后要好好的学习!!!说真的,题目是网上找的,答案也是mofang的,但是我还是研究了一下,发篇博客记录一下吧。题目详情:给定仅包含“()[]{}”六种括号的字符串,请你判断...

先写一下我的心得,也许可能是废话啊?

今天好好的了解了一下C++的代码风格,原来挺简单的。只不过自己使用C语言太长时间了,一时无法接受而已,其实使用C++的人还不少,这是一种面向对象的程序设计语言,却又不像Java那样高级,虽然学校把这一门课程删除了,但是还是有很多人在自学了(居然学的那么好),我也不能忒low了,什么也不会,以后要好好的学习!!!

说真的,题目是网上找的,答案也是mofang的,但是我还是研究了一下,发篇博客记录一下吧。

题目详情:
给定仅包含“()[]{}”六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。

输入格式:
第一行一个整数T(T<=10)

其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内)

输出格式:
对于每个字符串,匹配输出Yes,否则输出No

输入样例:

2
{()[]}
([)]

输出样例:

Yes No

AC代码:

#include<iostream>
#include<stack>
#include<string>
#include<algorithm>

using namespace std;

bool istrue(string s)//传入的是一个字符串
{
    stack<char> st;
    for(int i=0; i<s.length(); i++)
    {
        char t=s[i];
        if(t=='('||t=='['||t=='{')
            st.push(t);//符号的左边,直接存入栈
        else//符号的右边,进行下一步判断
        {
            if(st.empty())//如果栈为空,则没有传入字符,错误
                return false;
            char tp=st.top();//取栈顶的字符
            st.pop();//移除栈顶的字符
            if(t==')'&&tp!='(')
                return false;
            if(t==']'&&tp!='[')
                return false;
            if(t=='{'&&tp!='}')
                return false;
        }
    }
    return st.empty();//判断此时栈是否为空,为空时则配对成功,返回正确
}

int main()
{
    int n;
    cin>>n;
    string str;
    for(int i=0; i<n; i++)
    {
        cin>>str;
        if(istrue(str))
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

本文地址:https://blog.csdn.net/qq_45745322/article/details/109016729