Я проанализировал строку в переменных, используя std::istringstream
.
Вот код:
Reservation rec;
Reservation::Reservation(): resID(""), resName(""), email(""), people(""), day(""), hour("")
{
}
Reservation::Reservation(const std::string & m_res): stringfile(m_res)
{
std::replace(stringfile.begin(), stringfile.end(), ',', ' ');
std::istringstream strm(stringfile);
strm >> rec.resID >> rec.resName >> rec.email >> rec.people >> rec.day >> rec.hour;
}
Теперь мой желаемый вывод для объекта должен выглядеть следующим образом (просто фрагмент из большего вывода):
Reservation RES-001: John <john@email.com> Drinks on day 3 @ 5:00 for 2 people.
Reservation RES-002: David <david@email.com> Breakfast on day 4 @ 6:00 for 1 people.
По сути, все, что бросается в глаза, заключается в том, что моя friend
функция, которая печатает данные, вызывается как цикл. Мои std::istringstream
данные - это одна информация после следующей, цикличность не требуется.
Вот вывод, который я получаю:
Reservation RES-020:: Donna<donna@email.com>breakfast on DAY 4 @ HOUR:24 for 3people
Reservation RES-020:: 20Donna<0donna@email.com>lunch on DAY 4 @ HOUR:24 for 3people
Теперь я НЕ МОГУ изменить вызов на функцию друга. Вот оно:
for (auto i = 0u; i < cnt; ++i)
{
std::cout << *ppReservations[i];
}
И вот мой код, который выводит отформатированную информацию, повторяющую одну и ту же строку ( это фрагмент кода, остальная часть функции следует тем же параметрам, что ис разными часами сравнения ):
if (std::stoi(rec.hour) >= '6' || std::stoi(rec.hour) <= '9')
{
os << "Reservation " << rec.resID + ": " << rec.resName
<< "<" << rec.email + ">" << "breakfast on DAY " << rec.day
<< " @ HOUR:" << rec.hour << " for " << rec.people << "people\n";
}
Итак, вопрос в том, как я могу получить желаемый результат? Есть ли способ изменить мои std::istringstream
переменные так, чтобы они могли соответствовать циклу for
, который вызывает функцию friend
, чтобы вывод не совпадал с повторением строки снова и снова?