我想在C++中創建平衡括號。我有兩個功能,is_balanced
和convert_bracket
。基本上,在is_balanced
中,我將左括號添加到堆棧中,並在字符串中出現相應的右括號時將其彈出。但是,由於某種原因,s == convert_bracket(bracketStack.top())
總是失敗,即使s = '('
和bracketStack.top() == ')'
(convert_bracket會將其轉換爲'('
)。我需要這個條件才能通過,以便物品可以從堆疊中取出。我能得到任何建議嗎?Stacks: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 &&小號== convert_bracket(bracketStack.top()))並且如果(bracketStack.size()== 0) { }返回true; } else { return false; } – Ben