C++: проверка правильности порядка круглых и квадратных скобок в строке с использованием стековC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++: проверка правильности порядка круглых и квадратных скобок в строке с использованием стеков

Сообщение Anonymous »

Мне нужно создать функцию, используя 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»