问题描述:
假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
分析:用一个字符数组储存字符串,从左到右扫描表达式的每个字符,若是“(”,则让他进栈,若遇到“)”,则让栈顶元素出栈,当栈发生下溢或当表达式处理完毕而栈非空的时候,都表示不匹配,返回“NO"。
C++代码
#include<iostream>
using namespace std;
char c[256];
bool j(char c[256])
{
int top=0,i=0;
while(c[i]!='@')
{
if(c[i]=='(')top++;
if(c[i]==')')
{
if(top>0)
top--;
else
return 0;//栈下溢则不是
}i++;
}
if(top==0)
return 1;
else
return 0;
}
int main()
{
cin>>c;
if(j(c))
cout<<"YES";
else
cout<<"NO";
return 0;
}