C++でバランスブラケットコードを作成しようとしています。私は2つの機能、is_balanced
とconvert_bracket
を持っています。基本的にis_balanced
では、左括弧をスタックに追加し、対応する右括弧が文字列に現れたときにそれらをポップします。しかし、何らかの理由で、s = '('
とbracketStack.top() == ')'
(convert_bracketは'('
に変換されます)でも常にs == convert_bracket(bracketStack.top())
が失敗します。アイテムをスタックから取り除くことができるように、この条件を渡す必要があります。アドバイスを受けることはできますか?スタック:C++でのバランスの取れたブラケットが失敗する
#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;
}
:もし(bracketStack.size()> 0 && S == convert_bracket(bracketStack.top())) if(bracketStack.size()== 0) { がtrueを返します。 } else { falseを返します。 } – Ben