Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/75: Рейтинг темы: голосов - 75, средняя оценка - 4.60
 Аватар для s3lf
26 / 4 / 1
Регистрация: 20.04.2011
Сообщений: 60

Правильность ввода даты

25.11.2013, 00:36. Показов 14675. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Хотелось бы узнать способ проверки правильности формата введенной даты в строке.
Т.е. на вход подается строка, необходимо проверить, является ли она датой в формате ЧЧ.ММ.ГГГГ.
Необходимо учитывать то, что существует високосный год, а также количество дней в остальных месяцах.
Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.11.2013, 00:36
Ответы с готовыми решениями:

Определить правильность даты,введенной с клавиатуры
(Определить правильность даты,введенной с клавиатуры (число-от 1 до 31, месяц-от 1 до 12).Если введены некорректные данные, то сообщать об...

Проверка на правильность ввода C++
Приветствую Возник вопрос, написал небольшую программку для вычисления корней квадратного уравнения. Проверки все работают. Остается...

Проверить правильность ввода
cin >> RMB_MAX; if (RMB_MAX < 0) { RMB_MAX = 0; } else if (RMB_MAX > 100) { RMB_MAX = 100; } Есть баг, что если ввести...

1
 Аватар для caiman
13 / 13 / 4
Регистрация: 17.11.2013
Сообщений: 39
25.11.2013, 04:02
Лучший ответ Сообщение было отмечено s3lf как решение

Решение

Писал когда-то класс для обработки дат:
Date.h:
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
#ifndef DATE_H
#define DATE_H
 
#include <iostream>
 
using namespace std;
 
class Date {
    private:
        unsigned short int day;
        unsigned short int month;
        int year;
 
    public:
        Date();
        Date(unsigned short int, unsigned short int, int);
        unsigned short int getDay() const;
        unsigned short int getMonth() const;
        int getYear() const;
        Date* getDate();
};
 
ostream& operator<<(ostream& out, const Date& date);
 
#endif
Date.cpp:
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
#include <iostream>
#include "date.h"
#include <iomanip>
#include <ctime>
 
class DayException{};
class MonthException{};
class FebruaryToHighException{};
 
Date::Date() {
    time_t t = time(0);
    
    struct tm * now = localtime( & t );
    year = (now->tm_year + 1900);
    month = (now->tm_mon + 1);
    day = now->tm_mday;
}
 
Date::Date(unsigned short int day, unsigned short int month, int year) {
    int leapYear = year % 4;
 
    if ( day < 1 || day > 31 ) {
        throw DayException();
    }
 
    if ( month < 1 || month > 12 ) {
        throw MonthException();
    }
 
    if ( month == 2 && day > 29 - leapYear ) {
        throw FebruaryToHighException();
    }
 
    if ( day > 30 + month % 2 ) {
        throw DayException();
    }
 
    this->day = day;
    this->month = month;
    this->year = year;
}
 
unsigned short int Date::getDay() const {
    return this->day;
}
 
unsigned short int Date::getMonth() const {
    return this->month;
}
 
int Date::getYear() const {
    return this->year;
}
 
ostream& operator<<(ostream& out, const Date& date) {
    out << setfill('0') << setw(2) << date.getDay() << '.';
    out << setw(2) << date.getMonth() << '.';
    out << setw(4) << date.getYear();
}
Разберешься.

Добавлено через 1 минуту
Считаешь строку, разобьешь по "." - отдашь объекту - он тебе провалидирует.

Добавлено через 30 минут
Не согласен с собственным классом! ))
Вот программка для проверки:
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
#include <iostream>
#include <string>
#include <cstdlib>
 
#define LIMIT 3
 
int main() {
    std::string date;
    std::string array[LIMIT];
    size_t position = 0;
    int index = 0;
    bool isLeap = false;
    bool isValidDate = true;
    int day, month, year;
 
    std::cin >> date;
 
    while ( (position = date.find('.')) != std::string::npos ) {
        std::string token = date.substr(0, position);
        array[index] = token;
        date.erase(0, position + 1);
        index += 1;
    }
    array[index] = date;
 
    day = atoi(array[0].c_str());
    month = atoi(array[1].c_str());
    year = atoi(array[2].c_str());
 
    if ( year % 4 == 0 ) {
        isLeap = true;
    }
    if ( day < 1 || day > 31 ) {
        isValidDate = false;
    }
    if ( month < 1 || month > 12 ) {
        isValidDate = false;
    }
    if ( month == 2 && day > 29 && isLeap == true ) {
        isValidDate = false;
    }
    if ( month == 2 && day > 28 && isLeap == false ) {
        isValidDate = false;
    }
    if ( month == 4 || month == 6 || month == 9 || month == 11 ) {
        if ( day > 30 ) {
            isValidDate = false;    
        }
    }
 
    if ( isValidDate ) {
        std::cout << "Date valid!" << std::endl;
    } else {
        std::cout << "Invalid date!" << std::endl;
    }
 
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.11.2013, 04:02
Помогаю со студенческими работами здесь

Как контролировать правильность ввода?
В переменные типов unsigned и double нужно записать численное значение. Какие есть способы контроля ввода для избежания ввода символов,...

Проверка на правильность ввода с клавиатуры
Здравствуйте! задача: пользователь вводит с клавиатуры цифру, нужно проверить что пользователь действительно ввел цифру, а не букву, знак...

Проверить массив на правильность ввода
Вроде бы были похожие темы, но так как я тупой, то не смог подобрать подходящего решения. Задача такова: хочу заполнить массив с...

Проверка на правильность ввода значения.
Вот пишу так называемую &quot;проверку на дурака&quot;. Столкнулся с проблемой, код: { double ch; int y=0; do{ y=1; int q=0; int...

Определить правильность даты, введенной с клавиатуры, не используя циклы
Условие задачи: Определить правильность даты, введенной с клавиатуры, не используя циклы. Необходимо,чтобы после выполнения...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru