【问题标题】:How to effectively assign numerical string values to integers? [duplicate]如何有效地将数字字符串值分配给整数? [复制]
【发布时间】:2014-01-09 08:30:12
【问题描述】:

我有一个包含 HH:MM:SS(':' 是字符串的一部分。) 格式的时间值的字符串。我必须将时间转换为秒并将该值赋给一个整数变量。我我不知道有什么功能可以帮助我做到这一点。

【问题讨论】:

标签: c++


【解决方案1】:

使用 sscanf_s。 例如:

void ScanTime(char* strTime)
{
    int hours;
    int minutes;
    int seconds;

    sscanf_s(strTime, "%d:%d:%d", &hours, &minutes, &seconds);

    printf("hours: %d\nminutes:%d\nseconds:%d\n", hours, minutes, seconds);
}


int _tmain(int argc, _TCHAR* argv[])
{
    ScanTime("13:57:44");
    return 0;
}

【讨论】:

  • 没错,但真正的问题是如何获得总秒数...
  • 这很简单:int totalSeconds = seconds + minutes*60 + hours*3600;
【解决方案2】:

由于这不是标准的 C++ 函数,它很大程度上取决于您使用的框架或库。

这是在 Borland C++ Builder 中的完成方式:

String Time;
Time = "12:34:56";
TDateTime DT;

try{
    DT = StrToTime(Time);
  }catch(...){String M = "Error converting time string: "+Time; Application->MessageBox(M.c_str(),"ERROR",MB_OK );}

【讨论】:

    【解决方案3】:

    使用strtol。 例如::

    int a=(int)strtol(numeric_string.c_str(),(char **)NULL,10);
    

    如果您的意图是简单地转换 HH:MM:SS,则需要编写一个函数 算法是这样的(假设 24Hr 格式):

    1. split字符串使用“:”
    2. 使用strtol 将每个部分转换为整数。
    3. last part+(60* middle part)+(60*60*firstpart) 会给你 实际价值

    【讨论】:

    • “例如”是什么意思?
    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2013-10-29
    • 2020-04-28
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多