2013-12-04 3 views
-4

Попытки извлечь секунды из следующей строки, используя sscanf: Теперь 2013-12-04 18:01:20Распаковка заданного числа из массива полукокса

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

И это не удается, любые идеи, как сделать правильный формат для него? Или любые идеи, чтобы извлечь его проще? Мне нужна последняя секунда.

+6

"Это не может" ...... –

+1

Этот вопрос помечен [C++] и [C]. На каком языке вы используете? В любом случае, это должно помочь: http://en.cppreference.com/w/c/io/fscanf (часть о флаге '% s' будет хорошим местом, чтобы начать с того, что не так с вашим кодом) –

+0

Check out 'strptime', если доступно. – dornhege

ответ

2
sscanf("Now it's 2013-12-04 18:01:20", "%*s %*s %*s %*d:%*d:%d", &i) 
+0

Знаки ':' не являются строкой. Спасибо :) – Vanguard

+1

@Vanguard: '% s' соответствует строке до следующего ведущего пробела. Проблема заключается не в том, что ':' не является строкой, а скорее ': 01: 20' ** является ** строкой (и так далее' -12-04' и т. Д.) –

0

Вы можете использовать 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); 
    } 
2
if (1 == sscanf("Now it's 2013-12-04 18:01:20", 
    "Now it's %*d-%*d-%*d %*d:%*d:%d", &i)) Success(); 
+2

Я предпочитаю это, потому что это проверяет, что выражение, сопоставляемое как переменная 'i', может содержать любое значение +1. – Jekyll

Смежные вопросы