【发布时间】:2019-07-11 14:20:41
【问题描述】:
我正在使用堆栈做平衡括号。如果匹配,我需要显示“成功”,否则输出第一个不匹配的索引(1-indexing)。
我使用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;
}
每当字符串的第一个字符是右括号(')'或']')之一时,我都会遇到分段错误(核心转储)。它在输入为 '}' 但现在在 ')' 或 ']' 时工作
【问题讨论】:
-
stk和s的定义是什么?你能创建一个完整的段错误示例吗? -
@FrançoisAndrieux 不,我的意思是
stk.empty()。这适用于第一个字符是右括号的情况。所以堆栈是空的,因为我只推开括号。它在'}'而不是其他两个括号时工作。没有意义,因为它使用 OR 定义。 -
好吧,我把
s和stk弄混了。我以为你在检查s是否为空。
标签: c++ if-statement logical-operators