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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gdasar
186 / 47 / 10
Регистрация: 18.02.2013
Сообщений: 469
Записей в блоге: 9
Завершенные тесты: 1
#1

Преобразование текстовой даты в числовую - C++

13.12.2013, 20:50. Просмотров 254. Ответов 0
Метки нет (Все метки)

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

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <fstream.h>
#include <iostream>
#include <string>
 
struct dates
{
   string datas;
   struct dates *next; // указатель на следующий элемент стека
};
 
class Data
{
    public:
     void push(dates* &next, string datas);
     void show(dates &tmp);
};
 
void Data::push(dates* &next, string datas)   // функция будет помещать элемент в стек
// next – указатель на вершину стека
{
    dates *pv = new dates;      // объявляем новую динамическую переменную типа date
    pv->datas=datas;            // записываем  значение, которое помещается в стек
    pv->next=next;        // связываем новый элемент стека с предыдущим
    next = pv;                // новый элемент стека становится его вершиной
}
 
void Data::show(dates &tmp)
{
 cout << tmp.datas;
 cout << endl;
}
 
void main()
{
Data a; //переменная класса Data
struct dates *s=NULL;
struct dates tmp;  int ch=0;  int tohka=0; int date[8]={0,0,0,0,0,0,0,0}; int data;
ifstream ins("input.txt");
    while(!ins.eof())
    {
       ins>>tmp.datas;
       tohka=0;
       ch=0;
       for(int i=0;i<strlen(tmp.datas.c_str());++i)
       {
           if(tmp.datas[i]==46)
           {
              tohka++;      //количество точек в дате
           }
           if(tohka>2)  //больше чем 2 точки-не верная дата
           {
                a.show(tmp);          //выводим
                break;
           }
           if(tmp.datas[i]>57||tmp.datas[i]<46||tmp.datas[i]==47)
           {
               a.show(tmp);   // если в дате есть левые символы,то она не верная => выводим её
               break;
           }
           if(strlen(tmp.datas.c_str())>10||strlen(tmp.datas.c_str())<8)
           {
               a.show(tmp);   // если в дате больше 10 знаков и меньше 8-не верная => выводим её
               break;
           }
           //======================//
           /*преобразовываем текстовую дату в числа*/
           printf("ch=(%d) ",ch);
           if(tmp.datas[i]<=57&&tmp.datas[i]>=48) //если число
           {
               date[ch]=tmp.datas[i];
               printf("chisla=%c<< ",tmp.datas[i]);
               ch++;
           }
           else
           if(tmp.datas[i]==46||tmp.datas[i]=='\0') //если точка или конец строки
           {
             if(ch==2)
             {
               data=(date[0]-48)*10+(date[1]-48);
               printf("data=(%d)\n",data);
               ch=NULL;
               data=NULL;
             }
             else
             if(ch==3)
             {
                 data=(date[0]-48)*100+(date[1]-48)*10+(date[2]-48);
                 printf("data=(%d)---\n",data);
                 ch=NULL;
                 data=NULL;
             }
             else
             if(ch==4)
             {
                 data=(date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3]-48);
                 printf("data=(%d)\n",data);
                 ch=NULL;
                 data=NULL;
             }
             else
             if(ch>4)
             {
               a.show(tmp);   // если в дате есть 5-ти значное число,то она не верная=> выводим её
               break;
             }
           }
       }
    }
    ins.close();
    getchar();
}
Ну в общем,программа выводит день и месяц(числа),но не выводит год.

Проблема в этой части кода,но я никак не могу найти ошибку.
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
           /*преобразовываем текстовую дату в числа*/
           printf("ch=(%d) ",ch);
           if(tmp.datas[i]<=57&&tmp.datas[i]>=48) //если число
           {
               date[ch]=tmp.datas[i];
               printf("chisla=%c<< ",tmp.datas[i]);
               ch++;
           }
           else
           if(tmp.datas[i]==46||tmp.datas[i]=='\0') //если точка или конец строки
           {
             if(ch==2)
             {
               data=(date[0]-48)*10+(date[1]-48);
               printf("data=(%d)\n",data);
               ch=NULL;
               data=NULL;
             }
             else
             if(ch==3)
             {
                 data=(date[0]-48)*100+(date[1]-48)*10+(date[2]-48);
                 printf("data=(%d)---\n",data);
                 ch=NULL;
                 data=NULL;
             }
             else
             if(ch==4)
             {
                 data=(date[0]-48)*1000+(date[1]-48)*100+(date[2]-48)*10+(date[3]-48);
                 printf("data=(%d)\n",data);
                 ch=NULL;
                 data=NULL;
             }
             else
             if(ch>4)
             {
               a.show(tmp);   // если в дате есть 5-ти значное число,то она не верная=> выводим её
               break;
             }
           }
P.S. В коде еще не все проверки на правильность даты
Входной файл
C++
1
2
3
4
5
6
7
8
9
10
11
01.13.2014
01.13.2014
123.01.2012
15.11.1994
21.01.2000
30.12.180
30.01.1999
0.0.0
fr21.23.1234
12..12.2013
fr21...23...1234
Скажите,пожалуйста,что тут не так.

Добавлено через 4 часа 30 минут
HELP Я все еще не смог разобраться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 20:50     Преобразование текстовой даты в числовую
Посмотрите здесь:

преобразование даты - C++
ребята подскажите как определить количество дней, прошедших от 01.01.0001

Преобразование даты в число C++ - C++
Добрый день! Имеется таблица с данными, в одной колонке даты в формате dd.mm.yyyy, а в другой колонке целые числа. по этим данным в...

Распечатать числовую последовательность по условию - C++
Распечатать числовую последовательность по след правилам Первое число посл натуральное и кротно 3 Каждый послед элемент равен сумме...

Ввод выражения(а/б) в числовую переменную - C++
Здравствуйте! Есть следующий код:void main() { int i=0; system(&quot;chcp 1251&quot;); // смена кодировки для отображения кириллицы do ...

Кодировка из числовой системы в буквенно-числовую - C++
ДД уважаемые программисты ! Вопрос следующий , необходимо написать код, который будет кадировать из числовой системы в буквенное...

Как найти не только числовую информацию в памяти процесса ? - C++
Написал я программку на с++ он открывает процесс игры и выводит мне в консоль количество хп . Нужный адрес я нашел через артмани . И...

Циклически сдвинуть числовую последовательность на заданное количество элементов - C++
Дана последовательность из N целых чисел и число K. Необходимо сдвинуть всю последовательность (сдвиг - циклический) на |K| элементов...

Записать по одному элементу числовую матрицу в бинарный файл - C++
Помогите пожалуйста найти ошибку в коде #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include...

На основе введенной даты рождения и текущей даты сообщить пользователю, сколько он прожил дней - C++
3. Написать программу, которая на основе введенной даты рождения и текущей даты сообщает пользователю, сколько он прожил дней. Принять во...

Введите числовую прямоугольную матрицу и найдите номер линии, в которой находится максимальный элемент - C++
Введите числовую прямоугольную матрицу и найдите номер линии, в которой находится максимальный элемент. Как ввести прямоугольную матрицу...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru