Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17

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

05.04.2018, 15:34. Показов 4527. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Столкнулся с простой задачкой как мне казалось, но не могу решить второй день.
Нужно проверить строку на правильность формата даты. На форме можно использовать только один Edit и кнопку.
Edit принимает строку, предположительно содержащую дату в формате дд.мм.гггг, разделитель может быть любым не числовым символом и значения дня, месяца и года может не совпадать с форматом.
Функция проверяет на корректность введенной даты и возвращает строку в строго определенном формате дд.мм.гггг.
По возможности не использовать стандартные функции. Если дата введена не корректно - возвращает пустую строку.
Например функция принимает 28/3-18 возвращает 28.03.2018.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2018, 15:34
Ответы с готовыми решениями:

Проверка на правильность заполнения даты
Страница с html-формой со следующими полями: Фамилия Имя; адрес электронной почты; адрес web-ресурса по нажатию на ...

Проверка на правильность введения строки на кириллице
привет) Я использую программу Visual Studio. И при написании курсовой работы использовала эту проверка на правильность вводимости языка. Но...

Проверка строки(в стеке) на правильность растановки скобок
Есть строка символов, признаком конца которой является ;. В строке могут быть фигурные, круглые, квадратные скобки. Скобки могут быть...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
05.04.2018, 16:02
Лучший ответ Сообщение было отмечено YARKOS как решение

Решение

Я бы сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <tchar.h>
#include <DateUtils.hpp>
#include <cstdio>
 
// ...
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s = Edit1->Text;
    int d, m, y;
    char ch;
    _stscanf(s.c_str(), _T("%d%c%d%c%d"), &d, &ch, &m, &ch, &y);
    y += (y < 100) * 2000; // числа, меньшие 100 считаем 2000-ными, а не 1900-ми
    if (IsValidDate(y, m, d))
        ShowMessage(FormatDateTime("dd.mm.yyyy", EncodeDate(y, m, d)));
    else
        ShowMessage(_T("Некорректная дата"));
}
2
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17
05.04.2018, 16:08  [ТС]
У меня старая версия с++ борланд 7.
Не понимает строку "[C++ Error] Unit1.cpp(25): E2268 Call to undefined function 'sscanf'".
C++
1
_stscanf(s.c_str(), _T("%d%c%d%c%d"), &d, &ch, &m, &ch, &y);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
05.04.2018, 16:13
Я про cstdio что, просто так написал?

У именя вышеприведенный код прекрасно компилируется и работает на 6-ом Билдере. И на XE4, если что - тоже.
Миниатюры
Проверка строки на правильность даты  
1
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17
05.04.2018, 16:43  [ТС]
Буду думать что не так.
Миниатюры
Проверка строки на правильность даты  
0
0 / 0 / 1
Регистрация: 23.04.2017
Сообщений: 17
05.04.2018, 19:05  [ТС]
Вот сделал. Бросаю код, может кому то поможет.
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
[CPP]//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <cstdio>
#include "Unit1.h"
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
 
bool valid_date(int _Year, int _Month,int _DayNo )
{
    int days_in_month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    if( _Year % 4 == 0 )
        days_in_month[2] = 29;
    
    if (( _Month < 1)||(_Month > 12 ))
        return false;
    
    if (( _DayNo < 1)||( _DayNo > days_in_month[_Month] ))
        return false;
    
    return true;
}
 
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s = Edit1->Text;
    int d, m, y;
    char ch;
    std::_stscanf(s.c_str(), _T("%d%c%d%c%d"), &d, &ch, &m, &ch, &y);
    y += (y < 100) * 2000; 
    if (valid_date(y, m, d))
        Edit1->Text=(FormatDateTime("dd.mm.yyyy", EncodeDate(y, m, d)));
    else
        {ShowMessage(_T("Некорректная дата"));
    }
}
 
//---------------------------------------------------------------------------
[/CPP]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2018, 19:05
Помогаю со студенческими работами здесь

Проверка строки на правильность запись вещественного числа
Помогите пожалуйста(( Определить, является ли заданная строка правильной записью вещественного числа (возможно, со знаком, а также с...

Через форму вводится лента формата даты, например (02.04.1978). Разработать сценарий, который проверяет правильность введенной даты.
Через форму вводится лента формата даты, например (02.04.1978). Разработать сценарий, который проверяет правильность введенной даты. ...

Проверка возможности представления строки как даты
Добрый вечер. Возник такой вопрос. Есть БД access, в которой есть поле типа 'дата'. Можно ли в delphi перед выводом этой таблицы...

Правильность ввода даты
Всем привет. Хотелось бы узнать способ проверки правильности формата введенной даты в строке. Т.е. на вход подается строка, необходимо...

Проверить правильность даты
помогите, пожалуйста 1.Дана дата из трех чисел (день, месяц и год). Вывести yes, если такая дата существует (например, 12 02 1999 - yes,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru