Проверка сбалансированности скобок в выражении с использованием вектора - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь проверить, сбалансирована ли строка скобок. Я пытаюсь использовать векторы в C ++ для того же. Выходными данными должен быть размер вектора, и если размер равен 0, строка сбалансирована, а если нет, она не сбалансирована. Однако я получаю пустой вывод для кода ниже.

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    int j;
    vector<char>a;
    for(int i=0;i<s.length();i+=1){
        a.push_back(s[i]);
    }
    for(int i=0;i<a.size();i+=1){
        if (a[i]=='(') {
            j=i;
            while(a[j]!=')')
                j+=1;
        } else if(a[j]==')') {
            a.erase(a.begin()+i);
            a.erase(a.begin()+j);
        }
    }
}
cout<<a.size();
return 0;
}

Я ожидаю, что вывод будет число элементов в строке, кроме скобок. Однако я не получаю вывод для этой программы. Я подозреваю, что проблема с функцией стирания вектора.

1 Ответ

0 голосов
/ 20 октября 2019

Я бы сначала Google. В любом случае это цитата из cplusplus.com

Удалить элементы Удаляет из вектора либо отдельный элемент (позицию), либо диапазон элементов ([первый, последний)).

Это эффективно уменьшает размер контейнера на количество удаленных элементов, которые уничтожены.

Поскольку векторы используют массив в качестве основного хранилища, удаление элементов в позициях, отличных от конца вектора, вызываетконтейнер для перемещения всех элементов после того, как сегмент стерт на их новые позиции.

Так что я бы сказал, да

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...