我在实现此功能时遇到了一些心理问题。它应该能够确保正确输入所有括号,例如:()[]为真且[({} [])]为真,但[[]为假。我必须在此函数中使用堆栈,但由于某种原因,它正确地比较了2个括号,但是超出2的任何东西都不起作用。感谢任何帮助,谢谢。
这是我的代码:
function.h:
#include<iostream>
#include"stack.h"
using std::string;
bool bracketCheck(const string& s) {
Stack<char> stack;
if (!s.empty()) {
for (int i = 0; i < s.length(); i++) {
if (s[i] == '(' || s[i] == '{' || s[i] == '[') {
stack.push(s[i]);
}
else if (s[i] == ')' && stack.top() == '(' || s[i] == '}' && stack.top() == '(' || s[i] == ']' && stack.top() == '['){
stack.pop();
}
}
return stack.isEmpty() ? true : false;
}
}
stack.h:
template <typename T>
class Stack{
T* theStack_;
int max_;
int size_;
void grow(){
T* tmp=new T[max_*2];
for(int i=0;i<size_;i++){
tmp[i]=theStack_[i];
}
max_=max_*2;
delete [] theStack_;
theStack_=tmp;
}
public:
Stack(){
theStack_=new T[50];
max_=50;
size_=0;
}
void push (const T& data){
if(size_==max_){
grow();
}
theStack_[size_]=data;
size_++;
}
void pop(){
if(!isEmpty()){
size_--;
}
}
//removed top() const
T top() {
if(!isEmpty()){
return theStack_[size_-1];
}
return T{};
}
bool isEmpty(){
return size_==0;
}
~Stack(){
delete [] theStack_;
}
};
主要:
int main()
{
string expression;
cout << "Enter an expression: ";
cin >> expression;
if (bracketCheck(expression))
cout << "Balanced\n";
else
cout << "Not Balanced\n";
}
例如:它出来说(]不平衡但()]是平衡的。
答案 0 :(得分:1)
你的问题在于这行代码:
if (s[i] == ')' && stack.top() == '(' || s[i] == '}' && stack.top() == '(' || s[i] == ']' && stack.top() == '[')
你需要在这里“分组”你的条件:
if ((s[i] == ')' && stack.top() == '(') || (s[i] == '}' && stack.top() == '{') || (s[i] == ']' && stack.top() == '['))
另请注意{
拼写错误。