Программа для проверки правильной расстановки скобок
- Напишите функцию которая в качестве параметра получает строку,
содержащую скобки вида (, { и [. Пример: std::string s = "({[]})";
- Функция возвращает true, если скобки в переданной строке расставлены
корректно и false в противном случае.
true: ({[]}), false: ({[}])
- Для решения данной задачи используйте реализованный вами стек
Добрый день ребят. Значит вот мое задание, само реализация стека вот: https://ideone.com/pBy9sx
Просто не понимаю как оно связано со стеком, и даже если связана не имею малейщего понятие как это реализовать, был бы рад если вы мне помогли
C/C++
Проверка на правильность расстоновки скобок C++
#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");
}
#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");
}
Вам предлагают при нахождении открывающей скобки записывать её в стек.
При нахождении закрывающей - вытаскивать из стека. Соотв. сравнивать.
При нахождении закрывающей - вытаскивать из стека. Соотв. сравнивать.
#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;
}
#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;
}
Денис Дмитриевич Полулях
Инклуды агонь =)
Похожие вопросы
- Как сделать проверку на число типо если кто то ввел не число то будет чтото выводить на экран c++
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Задача на C++ (Остатки).
- Задача по c++ на векторы. Часть программы написана. Нужны правки.
- Проблема с указателем в C++
getline vs std::getline