Преобразовать строку даты в заданный формат - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Разработать программу согласно варианту задания. Максимальная длина строк не менее 80 символов. При реализации программы необходимо использовать функции для обработки строк из библиотек stdlib.h и string.h Варианты заданий: Задана строка, содержащая дату в формате DD.MM.YYYY. Преобразовать строку в формат: DD MONTH, YYYY. Пример: «12.10.2005» → «12 October, 2005». При вводе проверять корректность даты.
#include <stdio.h> //Библиотека базового ввода и вывода
int main(int argc, char *argv[])
{
  //Объявление переменных для хранения дня и месяца
  unsigned day, mon;
  //Приглашение к вводу и ввод даты
  printf("Vvedice daty: "); scanf("%u.%u",&day,&mon);
  //Проверка корректности указания дня и месяца
  int flag = (day<1)||(day>31)||(mon<1)||(mon>12);
  //Проверка корректности указания дня в зависимости от
  //месяца (30 или 31 день)
  flag +=
    ((mon==4)||(mon==6)||(mon==9)||(mon==11))&&(day==31);
  //Проверка корректности указания дня в феврале
  flag += (mon==2)&&(day>28);
  //Если дата указана неверно, то вывод сообщения и выход
  if(flag) {printf("Nepravilnaia data\n"); return 0;}
  //Разложение дня на составляющие
  unsigned d1 = day/10, d2 = day%10;
  //Вывод словесного описания дня
  switch(d1){
 
    //Если это тридцатые числа
    case 3:{
     //Если тридцатое число
     if(d2==0) printf("30 ");
       //Если тридцать первое число
       else printf("31 ");
     break;
    }
    //Если это двадцатые числа
    case 2:{
     //Если двадцатое
     if(d2==0) {printf("20"); break;}
       //Если двадцать первое и далее
       else printf("2");
    }
    //Если это первые числа
    case 0: {
      switch(d2){
        case 1: {printf("1 "); break;}
        case 2: {printf("2 "); break;}
        case 3: {printf("3 "); break;}
        case 4: {printf("4 "); break;}
        case 5: {printf("5 "); break;}
        case 6: {printf("6 "); break;}
        case 7: {printf("7 "); break;}
        case 8: {printf("8 "); break;}
        case 9: {printf("9 "); break;}
      }
      break;
    }
    //Если число от десятого до девятнадцатого
    case 1:{
      switch(d2){
        case 0: {printf("10 "); break;}
        case 1: {printf("11 "); break;}
        case 2: {printf("12 "); break;}
        case 3: {printf("13 "); break;}
        case 4: {printf("14 "); break;}
        case 5: {printf("15 "); break;}
        case 6: {printf("16 "); break;}
        case 7: {printf("17 "); break;}
        case 8: {printf("18 "); break;}
        case 9: {printf("19 "); break;}
      }
      break;
    }
  }
  //Вывод на экран названия месяца в соответствии с
  //его номером
  switch(mon){
    case  1: {printf("Yanvyara"); break;}
    case  2: {printf("Fevrala"); break;}
    case  3: {printf("Marta"); break;}
    case  4: {printf("Aplerya"); break;}
    case  5: {printf("Maia"); break;}
    case  6: {printf("Iyna"); break;}
    case  7: {printf("Iyla"); break;}
    case  8: {printf("Avgysta"); break;}
    case  9: {printf("Setyabria"); break;}
    case 10: {printf("Oktyabria"); break;}
    case 11: {printf("Noyabria"); break;}
    case 12: {printf("Dekabria"); break;}
  }
  //Вывод знака перевод строки
  printf("\n");
  //Выход из программы
  return 0;
}
что и где добавить что бы выводило и год?

Решение задачи: «Преобразовать строку даты в заданный формат»

textual
Листинг программы
#include<stdio.h>
#include<conio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
 
void main()
{   char bf[8],abuf[20];
    struct tm _tm;
    memset(&_tm,NULL, sizeof(_tm));
    cputs(" Введите дату[ddmmyyyy]:");
    gets(bf);
   _tm.tm_year = atoi(&bf[4]); bf[4] = 0;
   _tm.tm_mon  = atoi(&bf[2]); bf[2] = 0;
   _tm.tm_mday = atoi(&bf);
   _tm.tm_year = _tm.tm_year - 1900;
   _tm.tm_mon--;
   strftime(abuf,sizeof(abuf),"%d %B, %G",&_tm);
    printf("Получилось: %s\n\r", abuf);
//    getch();
};

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

  1. Включаем необходимые заголовочные файлы
  2. Объявляем переменные и присваиваем им начальные значения
  3. Ввод даты с клавиатуры и сохранение её в переменной bf
  4. Присваиваем значения полям структуры tm, используя срез строки
  5. Уменьшаем значения годов на 1900 и месяцев на единицу
  6. Преобразуем структуру tm в строку с помощью функции strftime
  7. Выводим полученную строку на экран
  8. Ждем нажатия клавиши для завершения работы программы

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


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

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

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