Форум программистов, компьютерный форум CyberForum.ru

Определить, является ли последовательность корректной записью даты - C++

Восстановить пароль Регистрация
 
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
12.01.2013, 16:37     Определить, является ли последовательность корректной записью даты #1
С клавиатуры задается последовательность символов. Написать программу, которая проверяет, является ли эта последовательность корректной записью даты (датой считаем запись, где первым указанное число, после - месяц, а потом год (4 или 2 цифры), причем разделителями могут быть символы «/», «.» И «-»).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2013, 16:37     Определить, является ли последовательность корректной записью даты
Посмотрите здесь:

Строки. Определить, является ли он правильной десятичной записью вещественного числа C++
C++ Определить, является ли текст десятичной записью числа, кратного 9
Определить, является ли текст является записью четного числа в семеричной системе C++
Определить, является ли текст шестнадцатеричной записью числа, кратного 5 (Pascal -> C++) C++
ООП. Определить, является ли текст десятичной записью числа, кратного 4 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
12.01.2013, 19:38     Определить, является ли последовательность корректной записью даты #2
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int chislo,mes,god;
    string s;
    cin>>s;
    int c=0;
    for(int a=0;a!=s.size();a++)
    {
        if((a!=3 || a!=5) && int(s[a])<47 && int(s[a])>58)
            c=1;
    }
    if(c==0 && ((s[2]=='/' && s[5]=='/') || (s[2]=='.' && s[5]=='.') || (s[2]=='-' && s[5]=='-')))
    {
        chislo=int(s[0]-'0')*10+int(s[1]-'0');
        mes=int(s[3]-'0')*10+int(s[4]-'0');
        if(s.size()>8)
            god=int(s[6]-'0')*1000+int(s[7]-'0')*100+int(s[8]-'0')*10+int(s[9]-'0');
        else
            god=int(s[6]-'0')*10+int(s[7]-'0')+2000;
        if(chislo<32 && mes<13)
            cout<<"Everything is correct"<<'\n';
        else
            c=1;
    }
    if(c==1)
        cout<<"Error"<<'\n';
    return 0;
}
Код немного кривой.Программа не учитывает максимальное количество дней в месяце.
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
14.01.2013, 16:45  [ТС]     Определить, является ли последовательность корректной записью даты #3
ап, нужен вариант с использованием структур...
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
14.01.2013, 21:51     Определить, является ли последовательность корректной записью даты #4
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
#include <iostream>
#include <string>
 
using namespace std;
struct date
{
    int chislo,mes,god;
    string s;
};
 
int main()
{
    date data;
    cin>>data.s;
    int c=0;
    for(int a=0;a!=data.s.size();a++)
    {
        if((a!=3 || a!=5) && int(data.s[a])<47 && int(data.s[a])>58)
            c=1;
    }
    if(c==0 && ((data.s[2]=='/' && data.s[5]=='/') || (data.s[2]=='.' && data.s[5]=='.') || (data.s[2]=='-' && data.s[5]=='-')))
    {
        data.chislo=int(data.s[0]-'0')*10+int(data.s[1]-'0');
        data.mes=int(data.s[3]-'0')*10+int(data.s[4]-'0');
        if(data.s.size()>8)
           data.god=int(data.s[6]-'0')*1000+int(data.s[7]-'0')*100+int(data.s[8]-'0')*10+int(data.s[9]-'0');
        else
            data.god=int(data.s[6]-'0')*10+int(data.s[7]-'0')+2000;
        if(data.chislo<32 && data.mes<13)
            cout<<"Everything is correct"<<'\n';
        else
            c=1;
    }
    if(c==1)
        cout<<"Error"<<'\n';
    return 0;
}

Нажимаем спасибо, не стесняемся
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
14.01.2013, 22:51  [ТС]     Определить, является ли последовательность корректной записью даты #5
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
if((a!=3 || a!=5) && int(data.s[a])<47 && int(data.s[a])>58) c=1;
можеш объяснить эту строку?? =)

Добавлено через 7 минут
откуда цифры 3, 5, 47, 58
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
14.01.2013, 23:04     Определить, является ли последовательность корректной записью даты #6
Цитата Сообщение от Ласковая Киса Посмотреть сообщение
C++
1
2
if(data.chislo<32 && data.mes<13)
    cout<<"Everything is correct"<<'\n';
TheVlad
5 / 5 / 1
Регистрация: 24.10.2012
Сообщений: 102
14.01.2013, 23:11  [ТС]     Определить, является ли последовательность корректной записью даты #7
Цитата Сообщение от soon Посмотреть сообщение
я там так написал...
C++
1
2
3
4
5
if(data.chislo>=32 || data.mes>=13)
            c=1;
 
         else
            cout<<"Everything is correct"<<'\n';
но надо еще добавить проверку на месяц, ато 31 день вовсе не в каждом месяце =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 00:06     Определить, является ли последовательность корректной записью даты
Еще ссылки по теме:

Определить, является ли текст двоичной записью числа кратного 6 C++
C++ Определить, является ли текст десятичной записью числа, кратного 5
C++ Определить, является ли текст десятичной записью числа, кратного 5

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

Или воспользуйтесь поиском по форуму:
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
15.01.2013, 00:06     Определить, является ли последовательность корректной записью даты #8
Цитата Сообщение от TheVlad Посмотреть сообщение
можеш объяснить эту строку?? =)
откуда цифры 3, 5, 47, 58
3,5 - это чтобы не считало разделителей.
У каждого символа свой код.(string - это по сути массив char-ов) И вот так получилось что цифры 0-9 имеют код 47-58.
data.s[a] - это какой-то символ.
Написав int(data.s[a]) мы получили код этого символа.
И условием проверили является он цифрой или нет.
Yandex
Объявления
15.01.2013, 00:06     Определить, является ли последовательность корректной записью даты
Ответ Создать тему
Опции темы

Текущее время: 01:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru