Чтение части входной строки с произвольным количеством пробелов

Я работаю над программой, которая позволяет пользователю добавлять «отдел» к школьным записям. Отделы хранятся в виде таких структур:

struct Department{

string ID;
string name;
};

Чтобы добавить новый отдел к записям, пользователь должен ввести команду в следующем формате:

D [5 digit department ID number] [Department name]

[Department name] Поле — это строка, которая продолжается до тех пор, пока пользователь не нажмет ввод. Таким образом, он может иметь любое количество пробелов (например, «Антропология» или «Информатика и инженерия»).

Когда пользователь вводит командную строку правильно (получено с getline), оно передается функции, которая должна извлечь соответствующую информацию и сохранить запись:

void AddDepartment(string command){

Department newDept;
string discard;     //To ignore the letter "D" at the beginning of the command

istringstream iss;
iss.str(command);

iss >> discard >> newDept.ID >> ??? //What to do about newDept.name?

allDepartments.push_back(newDept);

}

К сожалению, я не могу понять, как заставить этот подход работать. Мне нужен способ (если есть) завершить чтение iss.str, игнорируя при этом пробелы. Я готовлю noskipws флаг, но поле имени в новой записи было пустым, когда я проверял это:

...
iss >> discard >> newDept.ID >> noskipws >> newDept.name;
...

Я предполагаю, что что-то упускаю из-за условий / персонажей завершения. Как еще я могу создать функциональность, которую я хочу … может быть, что-то с get или даже петля?

1

Решение

Я пропустил бы первые пробелы, а затем прочитал остаток строки

iss >> discard >> newDept.ID >> ws;
std::getline(iss, newDept.name);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]