gpt4 book ai didi

c++ - 否则 if 语句无法正常运行

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:40 25 4
gpt4 key购买 nike

当我遇到这种情况时,我正在使用堆栈实现解决平衡括号问题,其中我使用“else-if”语句来检查右大括号,但这给出了与预期不同的输出。在将所有“else-if”语句更改为普通“if”语句时,代码工作得很好。我想知道为什么会这样,因为我一直认为使用“else-if”语句是更好的做法。

int main(){
stack<char> bracks;
string s; // input string: {a+(b+c-[e-f])*d}
cin >> s;
for(int i = 0; i < s.size(); i++){
if(s[i] == '{' || s[i] == '(' || s[i] == '[') bracks.push(s[i]);
else if(s[i] == '}')
if(bracks.top() == '{') bracks.pop();
else if(s[i] == ')')
if(bracks.top() == '(') bracks.pop();
else if(s[i] == ']')
if(bracks.top() == '[') bracks.pop();
}
if(bracks.empty()) cout << "Balanced\n";
else cout << "Unbalanced\n";
}

输入字符串的预期输出:“{a+(b+c-[e-f])*d}”是“平衡的”,但我的输出是“不平衡的”。

最佳答案

using 'else-if' statements was a better practice.

ifelse-if 是不同的东西,用在不同的场合。没有好坏之分。

考虑一下这段代码:

if (c1) if (c2) a else b

编译器看到它的方式是:

if (c1) {
if (c2)
a
else
b
}

原因是else总是属于最里面的if。在您的情况下,您的条件意味着以下内容:

if(s[i] == '{' || s[i] == '(' || s[i] == '[') {
bracks.push(s[i]);
} else if(s[i] == '}') {
if(bracks.top() == '{') {
bracks.pop();
} else if(s[i] == ')') {
if(bracks.top() == '(') {
bracks.pop();
} else if(s[i] == ']') {
if(bracks.top() == '[') {
bracks.pop();
}
}
}
}

您的缩进表明这不是您想要的。

关于c++ - 否则 if 语句无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57734209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com