gpt4 book ai didi

c++ - if 中的 OR 语句是否只检查一个条件?平衡支架

转载 作者:行者123 更新时间:2023-11-30 04:46:02 28 4
gpt4 key购买 nike

我正在使用堆栈进行 Balanced Bracket。如果匹配,我需要显示“成功”,否则输出第一个不匹配的索引(1-索引)。

我用了stack<pair <char,int>>stk; string s;用于存储左括号 ('{' '(' '[') 和括号的索引。(我为这些 "[{}"这样的情况存储了索引,其中不匹配是左括号而不是右括号。

for(int i=0;i<s.size();i++)
{
if(s[i]=='{' || s[i]=='[' || s[i]=='(')
{
stk.push(make_pair(s[i],i+1));
}
else if(!stk.empty() && (s[i]=='}' && stk.top().first=='{') ||
(s[i]==')' && stk.top().first=='(') || (s[i]==']' &&
stk.top().first=='['))
{
stk.pop();
}
else if(!stk.empty() && (s[i]=='}' && stk.top().first!='{') ||
(s[i]==')' && stk.top().first!='(') || (s[i]==']' &&
stk.top().first!='['))
{
ans=(i+1);
cout<<ans;
break;
}
else if(stk.empty()&&(s[i]=='}'||s[i]==')'||s[i]==']'))
{
ans=i+1;
cout<<ans;
break;
}
}

if(stk.empty() && ans==0)
{
cout<<"Success";
}
if(!stk.empty() && ans==0)
{
cout<<stk.top().second;
}

只要字符串的第一个字符是右括号(')' 或 ']' 之一,我就会收到段错误(核心已转储)。它在输入为 '}' 时有效,但现在在 ')' 或 ']' 时有效

最佳答案

问题的答案

Will the OR statement in if check only one condition? Balanced Bracket

在 C++ 20 标准(7.6.15 逻辑或运算符)的引用中

1 The || operator groups left-to-right. The operands are both contextually converted to bool (7.3). The result is true if either of its operands is true, and false otherwise. Unlike |, || guarantees left-to-right evaluation; moreover, the second operand is not evaluated if the first operand evaluates to true.

在第一个为真的操作数之后,所有其他操作数都不会计算。

例如,如果此条件 s[i]=='}' 评估为真,则其他条件

s[i]==')'  
s[i]==']'

未检查。

你也可以重写if语句

else if ( stk.empty() && ( s[i] == '}' || s[i] == ')' || s[i] == ']' ) )

喜欢

else if ( stk.empty() and ( s[i] == '}' or s[i] == ')' or s[i] == ']' ) )

至于段错误,要么 i 是无效索引,要么错误原因在于其他代码。

关于c++ - if 中的 OR 语句是否只检查一个条件?平衡支架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56991385/

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