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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рандом раскидать числа http://www.cyberforum.ru/cpp-beginners/thread1040113.html
вот массив 1 1 1 1 2 2 2 2 3 3 5 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 9
C++ Управление виртуальной памятью Необходимо создать структуру данных типа «дек» (очередь с двумя концами), каждый элемент которого занимает 100 кб. Компилирует без ошибок, но на "case 2" выдает ошибку. Не понимаю(( #include "stdafx.h" #include <windows.h> #include <conio.h> #include <deque> #include <iostream> #include <string.h> http://www.cyberforum.ru/cpp-beginners/thread1040072.html
Шаблон однонаправленного кольцевого списка C++
Доброго времени суток. Мне необходимо написать шаблон однонаправленного кольцевого списка. Данные в списке должны состоять из нескольких полей (информацией о книгах в библиотеке). Проблема возникает при выводе (процедура Show()). Для вывода конкретной строки со всеми полями нужно в процедуре вывода указывать конкретные поля для вывода (cout << tempHead->inf.udk и т. д.), что делает класс...
C++ Задачи по массивам
короч котаны есть проблема плохо разбираюсь в массивах, помогите кто чем смоЖет а?)) 2 задачи 1.Определить средний рост девочек, и мальчиков одного класса. В классе учится n учеников (n ≥ 15). 2.Заданы два массива разных размеров. Объединить их в один массив, включив второй массив между k-ым и (k + 1)-ым элементами первого (k задано). хоть что нибудь из этого, желательно с кратким...
C++ Предусмотреть просмотр номеров маршрутов по названию остановки http://www.cyberforum.ru/cpp-beginners/thread1040049.html
Схему автобусных маршрутов города представить структурой типа граф. Узлы структуры соответствуют остановкам автобусных маршрутов и дополнительно включают название остановок. Предусмотреть просмотр номеров маршрутов по названию остановки.
C++ писал задачку про числа фибоначчи #include <iostream> using namespace std; int main() { const int n=40; int fib; fib=1; fib=1; for(int i=2;i<40;i++) fib=fib+fib; подробнее

Показать сообщение отдельно
Gdasar
184 / 45 / 9
Регистрация: 18.02.2013
Сообщений: 421
Записей в блоге: 9
13.12.2013, 20:50     Преобразование текстовой даты в числовую
Проверка на правильность введенной даты

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 Я все еще не смог разобраться
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru