2016-09-02 118 views
-3

你好家伙我面临一个问题,因为我不能想出一个方法,它将一个字符串(它实际上是这种形式日期/月/年)作为参数和在矢量或数组中标记它。有人可以帮忙吗?我知道有很多关于这方面的话题,但是我找不到任何不包括boost的解决方案(我不想使用它)。带分隔符的标记字符串“/”

+0

为什么你想使用矢量? –

+0

*我不想使用* - 增强有什么问题? – 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); 
} 

这解析每个日期字符,由/分隔,并把它变成一个载体