Разбор имени и чисел из строки. Поместите числа в вектор - PullRequest
0 голосов
/ 02 апреля 2019

Данный формат представлен ниже:

Пол 34 56 72 89 92

Я хочу прочитать имя и поместить / разобрать числа в метки целых векторов.Все в формате выше разделены пробелом.

Это моя попытка решить эту проблему.Там опечатка ... Ранг на самом деле отмечает

StudentEntry:: StudentEntry(string line) {
    int temp = line.find(' '); // end of the name
    name = line.substr(0, temp); 
    string numbers = line.substr(temp+1);
    for (int i=0; i<rank.size(); i++) {
        rank.push_back(i);
        cout << "RANK: " << rank[i] <<endl;
    }
}

1 Ответ

0 голосов
/ 02 апреля 2019

Вот решение, которое является простой первой попыткой.Вам нужно будет больше исследовать, если вы хотите большей производительности / гибкости.
Как вы упомянули, это решение требует, чтобы компоненты во входной строке были разделены пробелами, чтобы иметь возможность давать правильные результаты.

Он использует std::istringstream, который работает так же, как std::cin.Вы предоставляете ей входную строку и продолжаете читать компоненты, разделенные пробелами.

#include <vector>
#include <string>
#include <sstream>


std::istringstream iss{ line };        // initialize with the input string

std::string name;
iss >> name;                           // extract the first component as a string

std::vector<int> marks;
for (int num = 0; iss >> num;)         // extract rest of the components as int
    marks.push_back(num);              // and store them in a vector

Помните, что имя не может содержать пробел.
Например, это решение не будет работать с этимinput: Paul Walker 34 56 72 89 92.
Чтобы иметь возможность анализировать строку с именем, содержащим пробелы, вам придется глубже вникать и делать более сложные вещи.

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