问题描述:
假设一个表达式由英文字母(小写)、运算符(+、-、*、/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右括号是否匹配,若匹配,则返回“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; }
转载于:https://www.cnblogs.com/flyljz/p/10646410.html