表达式括号匹配

题目描述

假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

输入格式

一行:表达式

输出格式

一行:“YES” 或“NO”

输入输出样例

输入

(x+y)/(1-x)@

输出

YES

输入

(25+x)(a(a+b+b)@

输出

NO

说明/提示

表达式长度小于255,左圆括号少于20个

#include
#include
#include 
using namespace std;
stack<char> st;
int main()
{
    string s;
    cin>>s;
    int m=s.length();
    for(int i=0;s[i]!='@'&&i<m;i++)
    {
  	if(st.empty())	//排除可能出现的例如)(ab)(的情形
  	{
            if(s[i]==')')
            {
    		cout<<"NO";
    		return 0;
   	    }
  	}
  	if(s[i]=='(')
  	{
            st.push('(');
        }
        else if(s[i]==')')
        {
            st.pop();
  	}
    }
    if(!st.empty())
    {
  	cout<<"NO";
    }
    else 
    {
  	cout<<"YES";
    }
    return 0;
}

#include
using namespace std;
int main()
{
	int c,tot=0;//tot初始化 
	while((c=getchar())!='@')
	{
		if(c=='(')tot++;
		else if(c==')')tot--;
		if(tot==-1)break;//防止误判 
	}
	if(tot==0)cout<<"YES";//括号匹配要在正反括号数量相等的前提下 
	else cout<<"NO";
	return 0;
}

你可能感兴趣的:(c++,c语言,c#)