Ввести две строки, содержащие время в формате 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;
}

Объяснение кода листинга программы

  1. В функции StrTimeToSeconds происходит перевод времени из строки в секунды
  2. В функции SecondsToTimeString происходит перевод времени из секунд в строку
  3. В функции main вводятся две строки времени
  4. Происходит вычисление разницы между двумя временами
  5. Выводится разница в секундах и новое время, соответствующее этой разнице

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы