Мне нужно создать функцию, используя pop() и push(), чтобы проверить правильность порядка круглых и квадратных скобок, например, "( ( [ [ ] ] ) )" правильно, а "( ( ( [ ] ] ) ) )" нет.
Моя идея заключалась в том, чтобы сделать цикл и для каждой итерации получить символ из строки и проверить, является ли это открытием (скобка или круглые скобки), а затем нажать его, если это закрытие, затем проверьте, является ли top() из стека открытием того же типа, если нет, то верните false, если это так, то pop() и продолжите цикл, пока строка не закончится.
Проблема в том, что я не знаю, почему мой код не работает.
Заранее спасибо!
#include
#include
using namespace std;
bool checkExpress(string str){
int i;
stack st;
if(str.length() % 2 != 0) return false;
for(i=0; i < str.length(); i++){
if(str == '(' || str == '[') st.push(str);
else if(str == ')' || str == ']'){
if(str == ']' && st.top() != '[') return false;
else if(str == ')' && st.top() != '(') return false;
}
st.pop();
}
return true;
}
int main(){
string a = "(([[]]))";
if(checkExpress(a)) cout
Подробнее здесь: https://stackoverflow.com/questions/664 ... is-correct