Преобразовать строку даты в заданный формат - 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
- Выводим полученную строку на экран
- Ждем нажатия клавиши для завершения работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д