Top.Mail.Ru
Ответы

Не понимаю почему выдаёт ошибку С++

#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

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
 #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!

Код проверяет баланс скобок

1234567891011121314151617181920212223242526272829
 #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"); 
} 
Аватар пользователя
Мудрец

Глядя на вашу программу решил продемонстрировать , как подобные вещи можно сделать на совершенно иных принципах. Исходный код демонстрирует динамическую инициализацию и использование массива указателей не функции для сканирования данных строки. Подобный подход позволяет достичь великолепных результатов по скорости обработки, правда и памяти расходуется больше.
Пример работы:

1234567891011
 Введите строку для анализа: { array[ {127.0.0.1;}, {::1} ] > tag } 
Всего скобок: 9 
Количество скобок '{': 3 
Количество скобок '}': 3 
Количество скобок '[': 1 
Количество скобок ']': 1 
Количество скобок '<': 0 
Количество скобок '>': 1 
Все скобки '{' имеют парные '}' 
Все скобки '[' имеют парные ']' 
Не все скобки '<' имеют парные '>'