Не понимаю почему выдаёт ошибку С++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int a, b, c;
cin >> a;
vector<int> data;
for (char const &i: a){
if i == "(" or i == "[" or i == "{" or i == "<"
{
data.push_back(i);
}
if i == ")" or i == "}" or i == "]" or i == ">" and len(b) != 0
{
if data.back() == "(" and i == ")":
{
data.pop_back(data.back());
}
else if data.back() == "<" and i == ">"
{
data.pop_back(data.back());
}
else if data.back() == "{" and i == "}"
{
data.pop_back(data.back());
}
else if data.back() == "[" and i == "]"
{
data.pop_back(data.back());
}
}
}
if data.size() == 0:
print("True")
else:
print("False")
}
выдаёт ошибку: 'begin' was not declared in this scope
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
string a; // Используем строку для ввода символов
cin >> a;
vector<char> data; // Вектор для хранения символов
for (char const &i : a) // Итерируемся по символам в строке
{
// Заменяем кавычки "" на одинарные ''
if (i == '(' || i == '[' || i == '{' || i == '<')
{
data.push_back(i);
}
else if ((i == ')' || i == '}' || i == ']' || i == '>') && data.size() != 0)
{
if (data.back() == '(' && i == ')')
{
data.pop_back();
}
else if (data.back() == '<' && i == '>')
{
data.pop_back();
}
else if (data.back() == '{' && i == '}')
{
data.pop_back();
}
else if (data.back() == '[' && i == ']')
{
data.pop_back();
}
}
}
if (data.size() == 0)
{
cout << "True" << endl;
}
else
{
cout << "False" << endl;
}
return 0;
}
Ну и жесть же у вас написана! Помесь С++ и Python!
Код проверяет баланс скобок
#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) {
return false;
break;
}
else box.pop();
}
auto pos = left.find(letter);
if (pos != string::npos) box.push(rigth.at(pos));
}
return !!box.empty();
}
int main() {
cout << ">>> ";
string line;
getline(cin, line);
cout << (brackets(line) ? "YES" : "NO") << '\n';
system("pause > nul");
}
Глядя на вашу программу решил продемонстрировать , как подобные вещи можно сделать на совершенно иных принципах. Исходный код демонстрирует динамическую инициализацию и использование массива указателей не функции для сканирования данных строки. Подобный подход позволяет достичь великолепных результатов по скорости обработки, правда и памяти расходуется больше.
Пример работы:
Введите строку для анализа: { array[ {127.0.0.1;}, {::1} ] > tag }
Всего скобок: 9
Количество скобок '{': 3
Количество скобок '}': 3
Количество скобок '[': 1
Количество скобок ']': 1
Количество скобок '<': 0
Количество скобок '>': 1
Все скобки '{' имеют парные '}'
Все скобки '[' имеют парные ']'
Не все скобки '<' имеют парные '>'