Конструктор, который принимает строковые данные и создает переменные типа int - PullRequest
0 голосов
/ 22 декабря 2018

Я создаю класс и хочу создать конструктор, который принимает входные данные в виде строки в виде: гггг-мм-дд чч: nn: ss (например, 2017-11-15 12:14:54).Я хотел бы сохранить год, месяц, день, часы, минуты и секунды в отдельных переменных (предпочтительно типа int).То есть я хочу сохранить первые 4 символа строки в одной переменной, символы, соответствующие mm в другой переменной и т. Д. Я знаю, что можно преобразовать строки в int, но я не знаю, как преобразовать определенные символыв строке к переменной.Любая помощь будет очень высоко ценится.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Если вы знаете, что строка будет в этом точном формате, вы можете использовать функцию-член substr строки:

string substr (size_t pos = 0, size_t len = npos) const;

Первый аргумент - это индекс первой буквы, которую вы хотите включить, второйаргумент - длина возвращаемой строки.В сочетании с stoi () из C ++ 11 вы можете сделать что-то вроде:

int year = stoi(full_date.substr(0, 4));
int month = stoi(full_date.substr(6, 2));
//Etc

Дополнительную документацию по этой функции-члену можно найти здесь: http://www.cplusplus.com/reference/string/string/substr/

0 голосов
/ 22 декабря 2018

Новый ответ

Я только что узнал об этой функции C ++ std::get_time.См. https://stackoverflow.com/a/33542189/13422 Но игнорируйте часть оболочки extern "C", просто чтобы она выглядела как strptime.

Это похоже на strptime в C ++.Вы, вероятно, хотите использовать std::get_time напрямую.

Старый ответ

Для этого вам на самом деле не нужны функции C ++.Их слишком сложно использовать.

Используйте довольно хорошо известный POSIX strptime для чтения временных строк и strftime для их печати. ​​

Если вы действительно, действительно хотите сделать своедля себя используйте C sscanf, который почти идеально подходит для чтения хорошо отформатированных строк, подобных этой.

...