У меня есть строка ввода, которая должна представлять 24 часа. Допустимые входные данные — это строки типа:
7:04
07: 4
7: 4
7:04
И неверная строка ввода будет, очевидно, что-то вроде 25:68
, Есть ли простой способ утверждать формат времени, а затем разбор время в формате эпохи, учитывая, что время сегодня? Есть ли какая-нибудь библиотека повышения, которая пригодится здесь?
Вы можете сделать это, используя strptime, который является стандартным для Unix-подобных систем:
http://www.kernel.org/doc/man-pages/online/pages/man3/strptime.3.html
Я вижу два варианта:
Простое регулярное выражение или boost :: xpressive (мне это нравится больше).
Получить числа между точкой с запятой и преобразовать их в числа, а затем проверить их значения. Что-то вроде этого:
string sTime("53:30"); int iSemiColon = sTime.find(':'); if (atoi(sTime.substr(0, iSemiColon).c_str()) >= 24) return false; if (atoi(sTime.substr(iSemiColon + 1).c_str()) >= 60) return false;
Увидеть этот ответ. Если вы не ограничены STL, вы можете использовать boost.Regex
для проверки, хотя это такая простая проблема, что вы можете легко найти собственное решение.