Я работаю над программой, которая позволяет пользователю добавлять «отдел» к школьным записям. Отделы хранятся в виде таких структур:
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
или даже петля?
Я пропустил бы первые пробелы, а затем прочитал остаток строки
iss >> discard >> newDept.ID >> ws;
std::getline(iss, newDept.name);
Других решений пока нет …