解析时间军事时间字符串的角落案例

时间:2014-05-02 07:20:37

标签: c string pointers

通常,大多数军事时间都是这样的

12:34:56

我已经想出了一种方法,可以将小时,分钟和秒提取到自己的字符串中。

然而,有一个我无法想象的角落

示例:

12::

提取数字并转换为整数后,结果为0.这很好。 但是,我需要两个0来正确表示时间

char *hh = argv[2];
char *mm, *ss;
char *array[3];
char *temp =strchr(argv[2],':');
mm = temp + 1;

/*if(*mm == ':'){

  *mm = "00";
}*/

*temp = '\0';
temp = strchr(mm, ':');
ss = temp+1;
*temp = '\0';

如果你看一下注释的if部分,那就是我试图检查下一个指向的值是否是分号。如果是的话,我需要做的只有两个0&#39。

有任何线索如何处理?

1 个答案:

答案 0 :(得分:1)

将这些数据提取为整数而不是字符串会好得多。

类似的东西:

bool parse_hms(int *hours, int *minutes, int *seconds, const char *hms)
{
  *hours = *minutes = *seconds = 0;

  return sscanf(hms, "%d:%d:%d", hours, minutes, seconds) > 0;
}

应该有效。请注意,该函数假定所有三个指针都有效。如果至少解析了其中一个数字,则返回true。未解析的数字将设置为0(当然也可以作为元素值有效)。