C++ Разбиение строки на вектор слов

414
08 мая 2017, 02:34

Есть файл со строками разной длины. Слова в котором, разделены запятыми. Нужно считать эти слова в двумерный вектор.

Написал такой код, но при исполнении, вектор остаеться пустым

vector<vector<string> > features;
        string str, item;
        int i = 0;
        while(file)
        {
            getline(file, str);
            stringstream ss(str);
            while(getline(ss, item, ','))
                features[i].push_back(item);
            i++;
        }

Подскажите в чем проблема.

Answer 1

когда Вы обращаетесь вот так features[i].push_back(item);, то Вы обращаетесь к несуществующему элементу. То, что вектор остался пустым - просто повезло. А могло и упасть или ещё что то.

То есть, как минимум, нужно переписать так

vector<vector<string> > features;
string str, item;
int i = 0;
while(file)
{
    features.push_back(vector<string>()); // это ключевая строка
    getline(file, str);
    stringstream ss(str);
    while(getline(ss, item, ','))
        features[i].push_back(item);
    i++;
}
Answer 2

Забудьте про while(file) - оно сработает только после неудачного чтения.

Примерно так:

vector<vector<string>> features;
string str, item;
while(getline(file, str))
{
    stringstream ss(str);
    vector<string> vs;
    while(getline(ss, item, ','))
        vs.push_back(item);
    if (vs.size()) features.push_back(vs);
}

Вы добавляете новый вектор со словами в features только по факту, если что-то считано.

READ ALSO
Перевод программы с Pascal ABC на C++

Перевод программы с Pascal ABC на C++

Программа на паскале рабочаяНашла как на С++ будут вводиться и выводится матрицы и вектора, но как всё это объеденить я не знаю

1119
Задача на разности

Задача на разности

Всем привет ! Есть такая задача она проходит 50%Помогите пожалуйста найти мою ошибку ,ни как не могу найти ! Вот задача :

256
Реализация CRC-8. За что отвечает параметр init?

Реализация CRC-8. За что отвечает параметр init?

Кодирую программку для CRC разных стандартов(побитовая обработка) Застрял на параметре init

274