0&&s==convert_括号(bracketStack.top()){ bracketStack.pop(); }否则{ 返回false; } } } if(bracketStack.size()=0) { 返回true; }否则{ 返回false; } } int main(){ 字符串表达式=“{[()]}”; 布尔答案=平衡(表达式); 若有(答复) 你指的是Hackerrank挑战,对吗?诀窍是在进程结束时检查堆栈是否为空。你可以在最后有平衡括号和不完整括号!,c++,C++" /> 0&&s==convert_括号(bracketStack.top()){ bracketStack.pop(); }否则{ 返回false; } } } if(bracketStack.size()=0) { 返回true; }否则{ 返回false; } } int main(){ 字符串表达式=“{[()]}”; 布尔答案=平衡(表达式); 若有(答复) 你指的是Hackerrank挑战,对吗?诀窍是在进程结束时检查堆栈是否为空。你可以在最后有平衡括号和不完整括号!,c++,C++" />

堆栈:C+中的平衡括号+;弱点 我试图在C++中创建平衡括号代码。我有两个功能,是平衡的和转换括号。基本上,在is_balanced中,我将左括号添加到堆栈中,并在字符串中出现相应的右括号时将其弹出。但是,由于某种原因,s==convert_括号(bracketStack.top())总是失败,即使s='('和bracketStack.top()=')(convert_括号将其转换为”(')。我需要通过此条件才能将项目从堆栈中取出。我能得到任何建议吗 #include <map> #include <set> #include <stack> #include <string> #include <cstdio> #include <cstring> #include <iostream> #include <unordered_map> using namespace std; char convert_bracket(char s) { switch(s){ case ')': s = '('; break; case ']': s= '['; break; case '}': s= '{'; break; } return s; } bool is_balanced(string expression) { stack<char> bracketStack; for(char s : expression){ if(s == '(' || s == '[' || s == '{'){ bracketStack.push(s); } else { if(bracketStack.size()>0 && s == convert_bracket(bracketStack.top())) { bracketStack.pop(); } else { return false; } } } if(bracketStack.size() == 0) { return true; } else { return false; } } int main(){ string expression = "{[()]}"; bool answer = is_balanced(expression); if(answer) cout << "YES\n"; else cout << "NO\n"; return 0; } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 字符转换_括号(字符s){ 开关{ 大小写“)”:s=”(”; 打破 大小写']':s='['; 打破 大小写“}”:s='{'; 打破 } 返回s; } 布尔是平衡的(字符串表达式){ 堆栈支架堆栈; for(字符s:表达式){ 如果(s=='('| | s=='['| | s=='{'){ 支架堆叠。推动(s); }否则{ if(bracketStack.size()>0&&s==convert_括号(bracketStack.top()){ bracketStack.pop(); }否则{ 返回false; } } } if(bracketStack.size()=0) { 返回true; }否则{ 返回false; } } int main(){ 字符串表达式=“{[()]}”; 布尔答案=平衡(表达式); 若有(答复) 你指的是Hackerrank挑战,对吗?诀窍是在进程结束时检查堆栈是否为空。你可以在最后有平衡括号和不完整括号!

堆栈:C+中的平衡括号+;弱点 我试图在C++中创建平衡括号代码。我有两个功能,是平衡的和转换括号。基本上,在is_balanced中,我将左括号添加到堆栈中,并在字符串中出现相应的右括号时将其弹出。但是,由于某种原因,s==convert_括号(bracketStack.top())总是失败,即使s='('和bracketStack.top()=')(convert_括号将其转换为”(')。我需要通过此条件才能将项目从堆栈中取出。我能得到任何建议吗 #include <map> #include <set> #include <stack> #include <string> #include <cstdio> #include <cstring> #include <iostream> #include <unordered_map> using namespace std; char convert_bracket(char s) { switch(s){ case ')': s = '('; break; case ']': s= '['; break; case '}': s= '{'; break; } return s; } bool is_balanced(string expression) { stack<char> bracketStack; for(char s : expression){ if(s == '(' || s == '[' || s == '{'){ bracketStack.push(s); } else { if(bracketStack.size()>0 && s == convert_bracket(bracketStack.top())) { bracketStack.pop(); } else { return false; } } } if(bracketStack.size() == 0) { return true; } else { return false; } } int main(){ string expression = "{[()]}"; bool answer = is_balanced(expression); if(answer) cout << "YES\n"; else cout << "NO\n"; return 0; } #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 字符转换_括号(字符s){ 开关{ 大小写“)”:s=”(”; 打破 大小写']':s='['; 打破 大小写“}”:s='{'; 打破 } 返回s; } 布尔是平衡的(字符串表达式){ 堆栈支架堆栈; for(字符s:表达式){ 如果(s=='('| | s=='['| | s=='{'){ 支架堆叠。推动(s); }否则{ if(bracketStack.size()>0&&s==convert_括号(bracketStack.top()){ bracketStack.pop(); }否则{ 返回false; } } } if(bracketStack.size()=0) { 返回true; }否则{ 返回false; } } int main(){ 字符串表达式=“{[()]}”; 布尔答案=平衡(表达式); 若有(答复) 你指的是Hackerrank挑战,对吗?诀窍是在进程结束时检查堆栈是否为空。你可以在最后有平衡括号和不完整括号!,c++,C++,你将3个开放括号类型推到堆栈上。但是你的case语句正在检查3个关闭类型,因此它总是返回什么已通过,因此检查将失败 切换逻辑,使其如下所示: char convert_bracket(char s) { switch(s) { case '(': s = ')'; break; case '[': s= ']'; break; case '{':

你将3个开放括号类型推到堆栈上。但是你的case语句正在检查3个关闭类型,因此它总是返回什么已通过,因此检查将失败

切换逻辑,使其如下所示:

char convert_bracket(char s)
{
     switch(s)
     {
         case '(': s = ')';
                   break;
         case '[': s= ']';
                   break;
         case '{': s= '}';
                   break;
     }
     return s;
}

我还需要这些来检查堆栈大小:if(bracketStack.size()>0&&s==convert_bracket(bracketStack.top()))和if(bracketStack.size()==0){return true;}否则{return false;}