0

我有两个字符串 srt1 和 str2 作为:

std::string str1 = "20110627120000";
std::string str2 = "20110629120000";

我需要的只是将它们转换为时间格式并比较哪个更大。我正在使用下面的代码,但我遇到了分段错误:

tm tm1,tm2;
sscanf(str1.c_str(),"%4d%2d%2d %2d%2d%2d",&tm1.tm_year,&tm1.tm_mon,&tm1.tm_mday,&tm1.tm_hour,&tm1.tm_min,&tm1.tm_sec);
sscanf(str2.c_str(),"%4d%2d%2d %2d%2d%2d",&tm2.tm_year,&tm2.tm_mon,&tm2.tm_mday,&tm2.tm_hour,&tm2.tm_min,&tm2.tm_sec);
std::cout << "5 \n";
if ((tm1.tm_year   <   tm2.tm_year) && (tm1.tm_mon<tm2.tm_mon) && (tm1.tm_mday<tm2.tm_mday ))
{
std::cout << str2 <<"is greater \n";
}
4

2 回答 2

0

您指定格式的日期可以轻松转换为整数,然后进行比较。见下文:

#include <iostream>

int main()
{
    unsigned long long date_a = std::stoull("20110627120000");
    unsigned long long date_b = std::stoull("20110629120000");
    std::cout << std::max(date_a, date_b) << std::endl;
    return 0;
}
于 2013-09-06T20:06:50.787 回答
0

当它们完全可比时,为什么要转换字符串?

int main()
{
    std::string str1 = "20110627120000";
    std::string str2 = "20110629120000";
    std::cout << ((str1 < str2) ? "True" : "False") << std::endl;
}

使用 sscanf 格式在 "%4d%2d%2d %2d%2d%2d" 之间有一个空格看起来完全错误。不检查它的结果,是。

于 2013-09-06T19:40:20.500 回答