stack 括号匹配——C++
程序员文章站
2022-09-16 21:59:19
先写一下我的心得,也许可能是废话啊?今天好好的了解了一下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
上一篇: Win10磁盘占用100%解决办法