У меня возникла небольшая проблема в реализации этой функции. Он должен иметь возможность убедиться, что все скобки введены правильно, такие как:() [] истинно, а [({} [])] истинно, но [[] будет ложным. Я должен использовать стек внутри этой функции, но по какой-то причине он сравнивал 2 скобки правильно, но все, что было введено выше 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";
}
, например: он выходит как говорится (] не сбалансирован, но()] сбалансирован.
Ваше довольно длинное булевское условие в вашем 'else-if' нуждается в некотором« брекетинге »: по своему усмотрению. Смешивание '&&' и '||' возможно не так, как вы думаете. Будьте * конкретными * в своих условных выражениях и не бойтесь бросать вокруг них парсеры. – WhozCraig
'bracketCheck' имеет пути, которые не имеют оператора' return'. Это означает, что программа недействительна, и компилятор разрешает генерировать код, который делает все, что он хочет. – user4581301