Привет, ребята, я столкнулся с проблемой, потому что не могу придумать метод, который примет строку (это фактически дата в этой форме день/месяц/год) в качестве параметра и tokenize в векторе или массиве. Может ли кто-нибудь помочь? Я знаю, что есть много тем об этом, но я не мог найти решений, которые не включают boost (которые я не хочу использовать).tokenize string with delimiter "/"
ответ
Если вы хотите, чтобы разобрать дату, то очевидно, отправной точкой будет std::get_time
:
struct tm t;
std::cin >> std::get_time(&t, "%d/%m/%Y");
Это помещает результат в struct tm
, а не вектор. Таким образом, вы можете получить доступ к дню месяца (например) как t.tm_mday
, а не пытаться запомнить, что x[1]
- это день, а x[2]
- год (или что-то еще).
Вы также получаете достаточное количество других процедур, которые знают, как манипулировать даты/времени в этом формате, наряду с mktime
, который может преобразовать его в time_t
(для которых предусмотрены довольно много более полезных процедур).
Здесь вы находитесь.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int main()
{
std::string s("2016/8/2");
std::istringstream is(s);
std::vector<std::string> v;
v.reserve(3);
for (std::string s; std::getline(is, s, '/');)
v.push_back(s);
for (const auto & s : v)
std::cout << s << ' ';
std::cout << std::endl;
return 0;
}
Выход программы
2016 8 2
@GerasimosRagavanis Я использовал инвертированную входную строку. :) –
Попробуйте это:
string parsed,input="03/12/2016";
stringstream input_stringstream(input);
vector<string> date;
if(getline(input_stringstream,parsed,'/'))
{
date.push_back(parsed);
}
Это разбирает каждую дату символа, разделенные точкой /
, и помещает его в вектор
Почему вы хотите использовать вектор? –
* что я не хочу использовать * - Что не так с boost? – PaulMcKenzie
программы повышения не могут быть скомпилированы на компьютере моего учителя: D –