Ввести две строки, содержащие время в формате HH:MM:SS, и найти разность во времени - C (СИ)
Формулировка задачи:
Задача.
Требуется ввести 2 строки, используя функции gets и puts, содержащие время в формате HH:MM:SS, и найти разность во времени. Например 21:45:30 и 1:30:30. Разница - 3:45:00.
Задачу легко решить, используя операторы printf,scanf и немного математики. А мне надо использовать библиотеки stdlib.h и string.h. С этими библиотеками мало знаком и немного не понимаю, какие использовать из них функции для работы со строками. Я так понимаю мне надо будет в любом случае перебирать массив строк. Сначала для первой, потом для второй. Оттуда преобразовывать строки в цифры, а потом проводить с ними операции. Но как мне, допустим, преобразовать поочерёдно каждый символ строки в цифру, если он является цифрой?
Если есть возможность, то, пожалуйста, без использования библиотеки ctype.h.
Код не прошу, мне хотя бы алгоритм на словах.
Решение задачи: «Ввести две строки, содержащие время в формате HH:MM:SS, и найти разность во времени»
textual
Листинг программы
#include <stdio.h>
static int StrTimeToSeconds(const char* const timeString)
{
int secondsTotal = 0;
signed char hours, minutes, seconds;
sscanf(timeString, "%hhd:%hhd:%hhd", &hours, &minutes, &seconds);
secondsTotal = seconds + (60 * minutes) + (3600 * hours);
return secondsTotal;
}
static const char* SecondsToTimeString(const int secondsTotal)
{
static char timeString[9];
signed char hours = secondsTotal / 3600;
int temp = secondsTotal - (hours * 3600);
signed char minutes = temp / 60;
signed char seconds = temp - (minutes * 60);
sprintf(timeString, "%hhd:%hhd:%hhd", hours, minutes, seconds);
return (const char*)&timeString[0];
}
int main(void)
{
char time1[] = "12:43:24";
char time2[] = "11:15:31";
int difference = StrTimeToSeconds(time1) - StrTimeToSeconds(time2);
printf("Difference between %s and %s is %d seconds or %s\n", time1, time2, difference,
SecondsToTimeString(difference));
return 0;
}
Объяснение кода листинга программы
- В функции
StrTimeToSecondsпроисходит перевод времени из строки в секунды - В функции
SecondsToTimeStringпроисходит перевод времени из секунд в строку - В функции
mainвводятся две строки времени - Происходит вычисление разницы между двумя временами
- Выводится разница в секундах и новое время, соответствующее этой разнице