Преобразовать строку даты в заданный формат - 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();
};
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем переменные и присваиваем им начальные значения
- Ввод даты с клавиатуры и сохранение её в переменной bf
- Присваиваем значения полям структуры tm, используя срез строки
- Уменьшаем значения годов на 1900 и месяцев на единицу
- Преобразуем структуру tm в строку с помощью функции strftime
- Выводим полученную строку на экран
- Ждем нажатия клавиши для завершения работы программы