Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1200 / 769 / 128
Регистрация: 10.03.2012
Сообщений: 4,973

Дата в текстовом представлении

31.05.2024, 18:30. Показов 517. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пользователь вводит на экран дату в формате dd.mm.yyyy, например: 27.12.2020.
Вывести дату в текстовом виде, например: двадцать седьмое декабря 2020 года.
C++
1
2
3
4
5
6
7
8
9
std::vector<std::string> days = {" ", "первое", "второе", "третье", "четвертое", "пятое",
                                "шестое", "седьмое", "восьмое", "девятое", "десятое",
                                "одиннадцатое", "двенадцатое", "тринадцатое", "четырнадцатое",
                                "пятнадцатое", "шестнадцатое", "семнадцатое", "восемнадцатое", "девятнадцатое",
                                "двадцатое", "двадцать первое", "двадцать второе", "двадцать третье",
                                "двадцать четвертое", "двадцать пятое", "двадцать шестое", "двадцать седьмое",
                                "двадцать восьмое", "двадцать девятое", "тридцатое", "тридцать первое"};
std::vector<std::string> months = {" ", "января", "февраля", "марта", "апреля", "мая", "июня",
                                  "июля", "августа", "сентября", "октября", "ноября", "декабря"};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.05.2024, 18:30
Ответы с готовыми решениями:

gethostbyname: получение полного списка ipv4 и ipv6 адресов в текстовом представлении
Как-то недоходчиво написано в манах как работать с этой функцией. Я передаю в неё днс, она возвращает заполненную структуру hostent,...

Изображение в текстовом представлении rgb
Можно ли по средствам винапи пробежаться по всем пикселям изображения,чтобы записать в строку каждый пиксель в такой представлении...

Изменение формата дата и времени в текстовом файле
Программа должна запускаться из командной строки с одним параметром — именем входного файла. Исходный текст состоит из слов, отделенных...

3
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
31.05.2024, 19:29
C++
1
2
3
4
int dd, mm, yy;
scanf("%2d.%2d.%4d", &dd, &mm, &yy);
if(dd > 0 && dd < 32 && mm < 13 && mm > 0)
std::cout << days[dd] << " " << months[mm] << " " << yy << " года";
Но здесь не учитывается месяц, потом возможен случай с 31 февраля
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
31.05.2024, 22:18
Как вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <limits>
#include <ctime>
#include <array>
 
constexpr std::array day = {
    "первое", "второе", "третье", "четвертое", "пятое",
    "шестое", "седьмое", "восьмое", "девятое", "десятое",
    "одиннадцатое", "двенадцатое", "тринадцатое", "четырнадцатое",
    "пятнадцатое", "шестнадцатое", "семнадцатое", "восемнадцатое", "девятнадцатое",
    "двадцатое", "двадцать первое", "двадцать второе", "двадцать третье",
    "двадцать четвертое", "двадцать пятое", "двадцать шестое", "двадцать седьмое",
    "двадцать восьмое", "двадцать девятое", "тридцатое", "тридцать первое" };
 
constexpr std::array month = {
   "января", "февраля", "марта", "апреля", "мая", "июня",
   "июля", "августа", "сентября", "октября", "ноября", "декабря" };
 
int main()
{
    std::cout << "Введите дату\n";
 
    std::tm dt{};
    while (true) {
        if (std::cin >> std::get_time(&dt, "%d.%m.%Y")) {
            // тут проверка что день принадлежит введенному месяцу
            auto monthControl{ dt.tm_mon };
            std::mktime(&dt); // mktime - "выпрямляет" аргумент dt
            // если ввести число большее чем имеет месяц, то после 
            // mktime перещелкнет месяц на следующий - значит 
            // имеем не корректную дату. Если месяц остался как и 
            // и до вызова mktime - значит все ок.
            if (monthControl == dt.tm_mon) { break; }
        }
        // Если Ctrl+D / Ctrl+Z
        if (std::cin.eof()) {
            std::cerr << "Прервано пользователем";
            return 1;
        }
        std::cerr << "Неверный ввод. Попробуйте еще раз\n";
        // Почистим буфер и флаги ошибки
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
 
    // Вариант вывода 1
    // std::stringstream fmtStr;
    // fmtStr << day[dt.tm_mday - 1] << " " << month[dt.tm_mon] << " %Y года.";
    // std::cout << std::put_time(&dt, fmtStr.str().c_str()) << '\n';
 
    // Вариант вывода 2
    std::cout << day[dt.tm_mday - 1]
        << " " << month[dt.tm_mon]
        // tm_year - содержит кол-во лет начиная от 1900!
        << " " << (dt.tm_year + 1900) << " года.\n";
 
    return 0;
}
По теме:
std::get_time
std::put_time
std::mktime
std::tm
1
1200 / 769 / 128
Регистрация: 10.03.2012
Сообщений: 4,973
01.06.2024, 19:40  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
 
std::vector<std::string> days = {" ", "первое", "второе", "третье", "четвертое", "пятое",
                                "шестое", "седьмое", "восьмое", "девятое", "десятое",
                                "одиннадцатое", "двенадцатое", "тринадцатое", "четырнадцатое",
                                "пятнадцатое", "шестнадцатое", "семнадцатое", "восемнадцатое", "девятнадцатое",
                                "двадцатое", "двадцать первое", "двадцать второе", "двадцать третье",
                                "двадцать четвертое", "двадцать пятое", "двадцать шестое", "двадцать седьмое",
                                "двадцать восьмое", "двадцать девятое", "тридцатое", "тридцать первое"};
 
std::vector<std::string> months = {" ", "января", "февраля", "марта", "апреля", "мая", "июня",
                                  "июля", "августа", "сентября", "октября", "ноября", "декабря"};
 
int main() {
    std::string dateInput;
    std::cout << "Введите дату (дд.мм.гггг): ";
    std::getline(std::cin, dateInput);
 
    int a, b, c;
    std::stringstream ss(dateInput);
    char dot;
    ss >> a >> dot >> b >> dot >> c;
 
    std::cout << days[a] << " " << months[b] << " " << c << " года" << std::endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2024, 19:40
Помогаю со студенческими работами здесь

В текстовом поле вводится строка текста типа дата в формате '2025-12-31'
В текстовом поле вводится строка текста типа дата в формате '2025-12-31'. При нажатии на кнопку должна быть выполнена функция. Функция...

Определить, каких цифр нет в шестнадцатеричном представлении числа представлении
Создание программы, использующей тип данных «множество». Дано 10-ое число. Какие цифры не участвуют в его 16-ом представлении?

Access запрос Есть два поля : дата начало и дата окончания
Есть два поля : дата начало и дата окончания. Если дата находиться в диапазоне то нужно выводить в поле &quot;важность&quot; запись...

Открыть файл по параметрам: Дата создания, Дата изменения , Размер
Добрый день уважаемые господа программисты. Кто сталкивался с подобной задачей?: Необходимo открыть файл .txt на Autoit не...

Дата хранится в виде записи; определить, какая дата будет через А дней
Сегодняшняя дата хранится в записи с тремя полями. Определить, какая дата будет через А дней.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru