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循环根本没进去。本回答被网友采纳

请问c++这个程序中总显示着else与if不匹配,请问大家错在哪里了?
你代码中花括号的配对关系是不正确的。其中else前缺少一个右括号,else段代码结束后又多一个右括号 见下图:

题目一:括号配对检查程序 对输入的一段C或者C++代码(只要求其中一种...
主要是利用了栈的结构,在表达式的输入过程中实现对括号是否匹配的判断。根据其括号的原则:小括号之中不能含有大括号或中括号,中括号中不能含有大括号。再由紧密性,左边括号和右边括号是紧密相连的。否则判断为错。 其操作为:每输入一个字符打一下回车,若输入括号顺序错误则跳出,并显示错误!附:...

c++算术表达式的语法检查
do{a[i]=getchar();}while(a[i++]!='=');这个是约定=为结束输入。可以在第一次停顿时一口气输入全部表达式。如果不约定的话,可以用事实判定。比如说,按照刚刚那种读取,读到数字记录数字符合,读到+-*\/查看左侧有没有数字,接下来的输入是不是数字。括号接收左括号则等待右括号,直接右括号...

麻烦高手帮我看看这个程序是哪儿出问题了啊,运行即崩溃,这是个栈实现...
else{ printf("缺乏左括号");return;

C++作业 栈实现括号匹配 麻烦帮我改一下代码,谢谢啦
\/\/请完成栈模板类的实现,并解决括号匹配问题 bool match(string str){ Stack<char> zhan;string::iterator it = str.begin();for(; it != str.end(); ++it){ if (*it == '('){ zhan.push('(');} else if (*it == ')'){ if (zhan.isEmpty())break;zhan.pop();} } boo...

这个C++程序那里错了?为什么那里不能有个中括号【】
你那个参数是字符数组 输出的时候是直接cout<<str 不能cout<<str[] 也可以for循环一个一个字符输出 类似cout<<str[i]这样 直接cout<<str[]是不合法的 因为没有那个地址

关于C\/C++的一些选择题,我已经做好了,但不知道对错,求高手帮忙检查一下...
第三题有错,题目说的是“符合C语言语法的表达式”,A是语句,不是表达式 应该是B 第四题,该选C,估计是你马虎选错了,不解释 第六题,该选B,C的话不能这么声明,除非你之前已经先声明了b 第12题,该选C,没什么理由 第13题,也没什么好解释的,!a就是相当于a==0 第15题,该选A ...

c++,输入数值排序求最大最小,求大神帮我看一下哪错了。
for(int i=0;i<M;i++){\/\/注意,下面的for循环应该放在这花括号里面 for(int j=0;j<i;j++){\/\/注意,此处的for括号里的写法,还有,下面的if体应该放在这一层的花括号里。if(a[i]<a[j]){ t=a[i];a[i]=a[j];a[j]=t;\/\/这样数组就是从大到小排列的,输出第一个,最后一...

有一道c++关于switch的题目,大家帮忙看一下,给出答案,并且对每一项简单...
A)switch(pow(a,2)+pow(b,2)) (注:调用求幂的数学函数){case l:case 3:y 2 a+b;break;case 0:case 5:y = a-b; } B)switch(a*a+b*b);\/\/ 这里多余分号,应该switch(a*a+b*b){case 3:case 1:Y=a+b;break; case 0:Y = b-a;break; } C)sw...

C++一道程序,没有与这些操作数匹配的"[]"运算符
赋值运算符是编译器自动重载的, 但是下标运算符你没有重载.你这个程序还不止那一处错误:String& operator=(const String &s){};这个明显是一个函数声明, 但是你加了一对大括号.

相似回答