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

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

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

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

13.12.2013, 20:50. Просмотров 259. Ответов 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++):

Преобразование даты C++ - C++
Даны целые числа day, month, year. Проверьте возможность существования этой даты и в случае положительного результата выведите ее в...

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

Преобразование даты в секунды - C++
Здравствуйте. Есть 6 параметров : год, месяц, день, часы, минуты и секунды - это все хранится в переменных типа int. И нужно эту дату...

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

Преобразование даты в Unix-time - C++
Нужна формула или функция для преобразование даты в Unix-time. Например: На вход дата: Sun Apr 26 00:06:00 2015 На выход...

Преобразование даты в строку и обратно - C++
написал два метода для класса, первый преобразует дату в строку, а второй наоборот.. проблема со вторым методом.. подсобите если не трудно....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 20:50
Привет! Вот еще темы с ответами:

Преобразование строки в структуру для представления даты - C++
Дата вводится с клавиатуры в формате YYYY-MM-DD, формат даты имеет формат char *, его надо преобразовать в структуру struct DATE {int...

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

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

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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