【问题标题】:Extracting specified number from char array从 char 数组中提取指定的数字
【发布时间】:2013-12-04 16:32:57
【问题描述】:

尝试使用 sscanf 从下一个字符串中提取秒数: 现在是 2013-12-04 18:01:20

sscanf(buf, "%*s %*s %*d%*s%*d%*s%*d %*d%*s%*d%*s%d", &i);

它失败了,任何想法如何为它制作正确的格式?或者有什么想法可以更容易地提取它?我只需要最后一秒。

【问题讨论】:

  • “失败了”......
  • 这个问题被标记为 [C++] 和 [C]。您使用哪种语言?无论如何,这应该会有所帮助:en.cppreference.com/w/c/io/fscanf(关于%s 标志的部分将是一个很好的起点,可以从你的代码有什么问题开始)
  • 查看strptime(如果有)。

标签: c++ c scanf


【解决方案1】:
sscanf("Now it's 2013-12-04 18:01:20", "%*s %*s %*s %*d:%*d:%d", &i)

【讨论】:

  • 所以 ':' 符号不是字符串。谢谢:)
  • @Vanguard: %s 匹配字符串直到下一个前导空格。问题不在于: 不是字符串,而在于:01:20 字符串(-12-04 等也是)
【解决方案2】:
if (1 == sscanf("Now it's 2013-12-04 18:01:20", 
    "Now it's %*d-%*d-%*d %*d:%*d:%d", &i)) Success();

【讨论】:

  • 我更喜欢这个,因为它会检查与变量 i 匹配的表达式是否可以包含任何值 +1。
【解决方案3】:

您可以使用strrchr 查找传递的字符的最后一次出现。

    char * now =  "2013-12-04 18:01:20";
    char *ptr = strrchr( now, ':' );
    int i=0xFF; /* out of acceptable values ;) */
    if( ptr ) {
       i = atoi( ptr+1);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多