c++ - 检查平衡括号的解决方案无法正常工作
问题描述
我正在解决一个“检查平衡括号”问题,如果括号'以正确的顺序放置,我应该输出“成功”,如果括号'不匹配,我必须输出基于 1 的索引字符串中不匹配的括号。
这是我的问题的源代码:
#include <iostream>
#include <stack>
#include <string>
using namespace std;
char get_pair_opening_bracket( char c );
int bracket_check( string &s );
char get_pair_opening_bracket( char c ){
char o{};
if( c==')' ){
o= '(';
return o;
}
else if( c=='}' ){
o= '{';
return o;
}
else if( c==']' ){
o= '[';
return o;
}
}
int bracket_check( string &s ){
stack <char> brackets {};
for( size_t i{}; i< s.size();++i ){
if(( s[i]=='(') || ( s[i]== '[' ) || ( s[i]=='{' )){
brackets.push(s.at(i));
}
else if(( s[i]==')') || ( s[i]== ']' ) || ( s[i]=='}' )){
if( (brackets.empty()==true) || (brackets.top()!=get_pair_opening_bracket(s[i]) )){
return (i+1) ; // problem here
}
else{
brackets.pop();
}
}
}
if( brackets.empty()==true ){
return 0;
}
}
int main(){
string s{};
getline(cin,s);
bool check{};
check= bracket_check(s);
if( check ==0 ){
cout<<"Success"<<endl;
}
else{
cout<<check<<endl;
}
return 0;
}
我已经评论了我认为问题所在的行,这导致程序在括号不匹配的情况下始终输出“1”。所以,请帮我解决这个错误......
解决方案
其实我认为主要问题在这里
bool check{};
check= bracket_check(s);
您将整数返回值分配给布尔值。所以毫不奇怪,你只会得到 0 或 1 的答案。
您还有其他问题,更多实例如果输入是,您的函数将返回"("
什么?
顺便说一句,我看到这种风格相当多size_t i{};
。有什么问题size_t i = 0;
?对于像我这样的老前辈来说,理解起来要容易得多。
推荐阅读
- wpf - 如何在 WPF 工具栏中更改 ToolBarOverflowPanel 的 WrapWidth 值
- selenium - 调用类导致的空异常
- c# - 如何找到我的文件控制台应用程序的文件路径,找不到文件显示
- hibernate - EntityManagerFactory 类型的不明确依赖项
- java - 我使用Hystrix(1.5.18),并设置参数ErrorThresholdPercentage=30,总是marksuccess时的断路状态切换
- android - 单击 RecyclerView 项目时,有几个项目会起作用
- html - 点击没有任何反应
- c++ - 具有整数溢出的递归斐波那契
- javascript - 在服务器中加载项目时如何解决顺风消失问题?
- python - 将年份列转换为相应的年份列