c++表达式括号匹配那位大佬能帮我看一下程序哪里错了,急!在线等!

题目:题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
输入输出样例
输入样例#1: 复制
2*(x+y)/(1-x)@

输出样例#1: 复制
YES
输入样例#2: 复制
(25+x)*(a*(a+b+b)@
输出样例#2: 复制
NO
说明
表达式长度小于255,左圆括号少于20个

就是我的程序老是输出Yes,然后我没做关于结束是@的,下面是我的程序:
#include<bits/stdc++.h>
using namespace std;
int main() {
string x;
int top=0;
char a[21];
x=getchar();
int len=x.length();
for(int i=1;i<=len;i++) {
if(x[i]=='(') a[++top]=x[i];
else if(x[i]==')') {
if(top==0) {
cout<<"No";
return 0;
}
top--;
}
}
if(top==0) cout<<"Yes";
else cout<<"No";
return 0;
}
在线等,急急急!谢谢!

第1个回答  2019-01-30
你把x=getchar();改为gets(x);试一试。
第2个回答  2019-01-30
getchar一次只读一个字符,所以你这里的x.length就等于1,所以for循环根本没进去。本回答被网友采纳
相似回答