2016-09-02 7 views
-3

Привет, ребята, я столкнулся с проблемой, потому что не могу придумать метод, который примет строку (это фактически дата в этой форме день/месяц/год) в качестве параметра и tokenize в векторе или массиве. Может ли кто-нибудь помочь? Я знаю, что есть много тем об этом, но я не мог найти решений, которые не включают boost (которые я не хочу использовать).tokenize string with delimiter "/"

+0

Почему вы хотите использовать вектор? –

+0

* что я не хочу использовать * - Что не так с boost? – PaulMcKenzie

+0

программы повышения не могут быть скомпилированы на компьютере моего учителя: D –

ответ

6

Если вы хотите, чтобы разобрать дату, то очевидно, отправной точкой будет 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 (для которых предусмотрены довольно много более полезных процедур).

1

Здесь вы находитесь.

#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 
+0

@GerasimosRagavanis Я использовал инвертированную входную строку. :) –

1

Попробуйте это:

string parsed,input="03/12/2016"; 
stringstream input_stringstream(input); 
vector<string> date; 
if(getline(input_stringstream,parsed,'/')) 
{ 
    date.push_back(parsed); 
} 

Это разбирает каждую дату символа, разделенные точкой /, и помещает его в вектор