堆栈:C 失败中的平衡括号
Stacks: Balanced Brackets in C++ Failing
我正在尝试在C 中创建平衡括号代码。我有两个功能is_balanced
和convert_bracket
。基本上,在is_balanced
中,我将左括号添加到堆栈中,并在字符串中出现相应的右支架时将它们弹出。但是,由于某种原因,即使s = '('
和bracketStack.top() == ')'
(Convert_bracket将将其转换为'('
),s == convert_bracket(bracketStack.top())
也总是失败。我需要这种情况可以通过,以便可以从堆栈中取出该物品。我可以得到任何建议吗?
#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 << "YESn";
else cout << "NOn";
return 0;
}
您将3个打开的括号类型推向堆栈。但是,您的案例声明正在检查3种关闭类型,因此它始终返回通过的内容,因此检查将失败。
切换逻辑,这样它就是这样:
char convert_bracket(char s)
{
switch(s)
{
case '(': s = ')';
break;
case '[': s= ']';
break;
case '{': s= '}';
break;
}
return s;
}
您指的是Hackerrank挑战赛对吗?诀窍是检查过程结束时堆栈是否为空。
您可能最终具有平衡的支架和不完整的支架!
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 堆栈:C 失败中的平衡括号