/*Description
检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ].
Input:
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100个字符的字符串。
Output:
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100的字符串。
Sample Input:
3
a
2-[(1+2)*2]
(a+b])
Sample Output:
Yes
Yes
No
*/
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
stack<char> my;
string s;
int flag=0;
cin>>s;
int len=s.length();
for(int j=0;j<len;j++)
{
if(s[j]=='('||s[j]=='['||s[j]=='{')
my.push(s[j]);
if(s[j]==')')
{
if(my.empty()||my.top()!='(')
{
flag=1;
cout<<"No"<<endl;
break;
}
else
my.pop();
}
if(s[j]==']')
{
if(my.empty()||my.top()!='[')
{
flag=1;
cout<<"No"<<endl;
break;
}
else
my.pop();
}
if(s[j]=='}')
{
if(my.empty()||my.top()!='{')
{
flag=1;
cout<<"No"<<endl; //只有右括号或者括号不匹配
break;
}
else
my.pop();
}
}
if(!my.empty()&&flag==0)//针对"只有左括号"的时候
cout<<"No"<<endl;
if(my.empty()&&flag==0) //针对"没有任何括号的时候"并且falg==0保证了不多输出"No"
cout<<"Yes"<<endl;
}
}
2.后缀表达式算
/*后缀表达式计算
Input
第一行是一整数,即测试样例个数T.
以下T行,每一行是一个长度不超过100的字符串,代表一条后缀表达式。
表达式中只含有+、-、*、/四种运算符和26个小写英文字母,不含其它字符。每一个英文字母代表一个正整数:
a = 1,b = 2,c = 3...y = 25,z = 26。
Output
每一个输入样例,单独一行输出结果:后缀表达式的值,一个正实数S,保留两位小数。
Sample Input:
2
ab+c*
int**py++
Sample Output:
9.00
2561.00
*/
#include<iostream>
#include<stack>
#include<string>
#include <iomanip>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
stack<double> my;
double p,q;
string s;
cin>>s;
int len=s.length();
for(int j=0;j<len;j++)
{
if(s[j]>='a'&&s[j]<='z')
my.push((s[j]-'a'+1));
if(s[j]=='+')
{
p=my.top();
my.pop();
q=my.top();
my.pop();
my.push((p+q));
}
if(s[j]=='-')
{
p=my.top();
my.pop();
q=my.top();
my.pop();
my.push((q-p));
}
if(s[j]=='*')
{
p=my.top();
my.pop();
q=my.top();
my.pop();
my.push((p*q));
}
if(s[j]=='/')
{
p=my.top();
my.pop();
q=my.top();
my.pop();
my.push((q/p));
}
}
cout<<fixed<<setprecision(2)<<my.top()<<endl;
}
}