2016-12-01 6 views
1

У меня есть входящая строка, как это: - *DDMMYYHHMMSS#DD Стендов для Date, MM стендов для month, YY стендов для year, HH означает Hour ...Извлечения ИНТ значения из строки

Пример *021216213940# (Дата: 2 Декабрь, 2016 Время: 21:29:40)

Как извлечь значения из приведенной выше строки и скопировать в тип данных int.

int Date,Month,Year,Hours,Minutes,Seconds; 
+0

'int Date = (str [1] - '0') * 10 + str [2] - '0''. –

+0

Зачем умножаться на 10? –

+0

Вы умножаетесь на '10', чтобы получить« десятки ». Например, если первая цифра равна «2», то «2 * 10 = 20'. –

ответ

1

Чтобы преобразовать содержимое вашей строки, который необходимо преобразовать в (две цифры), десятичной, который является ten-based positional system.

Например, чтобы извлечь первые две цифры, которые вы используете индекс operator[], т.е. str[1] и str[2], конвертировать из char в int вычесть '0' характер использования ASCII упорядочения символов и, наконец, чтобы обеспечить правильное положение цифр нужно умножить 10:

int DD = (str[1] - '0') * 10 + str[2] - '0'; 

+0

Случайное имя переменной, первые две цифры вашей строки, это должен быть день, я думаю. – Ziezi

+2

Это дата. Я совсем забыл об этом. –

+0

Является ли все остальное приемлемым? Вам нужна дальнейшая разработка? – Ziezi

2

Вы можете использовать зсапЕ семейных функций, например:

char *incoming = "*021216213940#"; 
int day, month, year, hours, minutes, seconds; 
if (6 != sscanf(incoming, "*%2d%2d%2d%2d%2d%2d#", &day, &month, &year, &hours, &minutes, &seconds)) 
{ 
    ... /* handle invalid input here */ 
} 
+0

+1. Также как добавить, что 'sscanf' может использоваться, если вход уже находится в строке. Как 'char * p =" * 021216213940 # "; if (6! = sscanf (p, "*% 2d% 2d% 2d% 2d% 2d% 2d #", & day, & month, & year, & hours, & minutes, & seconds)) {/ * handlind * /} '' – 4386427

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