题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
输入
一行:表达式
输出
一行:“YES” 或“NO”
样例输入 Copy
【样例输入1】 2*(x+y)/(1-x)@ 【样例输入2】 (25+x)*(a*(a+b+b)@
样例输出 Copy
【样例输出1】 YES 【样例输出2】 NO
提示
表达式长度小于255,左圆括号少于20个
这道题目其实也没有太大的难度,所以大家就当乐子看看吧,但是我还是为了做出这道题寻求了一下gpt的帮助,中间有个问题我觉得没问题,但是结果。。
#include<iostream>
#include<stack>
using namespace std;
stack<char> kuo;
int main()
{
string s;
cin >> s;
int flag=0;
for (char ch : s)
{
if (ch == '(')
{
kuo.push(ch);
}
if (ch == ')')
{
if (kuo.empty())
{
flag = 1;
break;
}
else
{
kuo.pop();
}
}
if (ch == '@')
{
break;
}
}
if (!kuo.empty())
{
flag = 1;
}
if (flag == 1)
{
cout << "NO" << endl;
}
else if (flag == 0)
{
cout << "YES" << endl;
}
}