C/C++

Проверка на правильность расстоновки скобок C++

Программа для проверки правильной расстановки скобок
- Напишите функцию которая в качестве параметра получает строку,
содержащую скобки вида (, { и [. Пример: std::string s = "({[]})";
- Функция возвращает true, если скобки в переданной строке расставлены
корректно и false в противном случае.
true: ({[]}), false: ({[}])
- Для решения данной задачи используйте реализованный вами стек

Добрый день ребят. Значит вот мое задание, само реализация стека вот: https://ideone.com/pBy9sx

Просто не понимаю как оно связано со стеком, и даже если связана не имею малейщего понятие как это реализовать, был бы рад если вы мне помогли
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool brackets(const string& line) {
stack<char> box;
const string left{ "([{" };
const string rigth{ ")]}" };
bool balance = true;
for (auto letter : line) {
if (rigth.find(letter) != string::npos) {
if (box.empty() || box.top() != letter) {
balance = false;
break;
} else box.pop();
}
auto pos = left.find(letter);
if (pos != string::npos) box.push(rigth.at(pos));
}
return balance;
}
bool brackets(const char* line) {
return brackets(string(line));
}
int main() {
cout << ">>> ";
string line;
getline(cin, line);
cout << (brackets(line) ? "YES" : "NO") << '\n';
system("pause");
}
Владимир Науменко
Владимир Науменко
94 087
Лучший ответ
Роман Тонков Спасибо добрый человек, но это строка getline(cin, line); не работает чето
Роман Тонков Могу скинуть весь код вам, может это изза того что я косанул там не стандартные стек а свой https://ideone.com/Jwx2mE
Владимир Науменко cstring vs string
getline vs std::getline
Роман Тонков Я убрал свой стек и свой код, тупо скопировал ваш код и поставил его в компилятор, запустил, ввожу ([] показывает YES, но по сути он должен был показать NO потому что там ведь не закрывается скобка (
Вам предлагают при нахождении открывающей скобки записывать её в стек.
При нахождении закрывающей - вытаскивать из стека. Соотв. сравнивать.
#include google
#include shkolota
#include search_rukagop

std::map brackets = {
{')', '('},
{'}', '{'},
{']', '['}
};

inline bool open_brackets(char ch) {
return ch == '(' || ch == '{' || ch == '[';
}

inline bool close_brackets(char ch) {
return ch == ')' || ch == '}' || ch == ']';
}

bool good_sequence(std::string& str)
{
std::stack st;
for (auto ch : str) {
if (open_brackets(ch)) st.push(ch);
else if (close_brackets(ch)) {
if (!st.empty() && st.top() == brackets[ch])
st.pop();
else
return false;
}
}
return st.empty();
}

int main()
{
std::string s = "([]))";
(good_sequence(s)) ? std::cout << "yes" : std::cout << "no";
system("pause");
return 0;
}