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

Правильность ввода даты - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задание по двумерным массивам(доработка) http://www.cyberforum.ru/cpp-beginners/thread1018005.html
Ребят,чем можно заменить "указатель на указатель",а то меня спрашивают,а я ваще не в курсе!Или можно как-то код исправить,чтоб вообще указателей тут не было,а то это тема какая-то напряжная для меня. Надо как-то попроще выполнить.Спасибо) Заполнить квадратную матрицу случайными числами(функция). Найти среднее арифметическое первого столба(функция) и кол-во элементов матрицы,которое превышает...
C++ нужен небошой цикл Матрица 10*14. Нужно найти средние квадратичные значения столбцов и строк матрицы. http://www.cyberforum.ru/cpp-beginners/thread1017990.html
Ошибки памяти C++
Задние: Создать два класса вектор (float *) и матрица (float **). Определить конструкторы - по умолчанию, с параметром, для класса матрица с двумя параметрами, копирования, деструкторы. Определить функцию умножения матрицу на вектор как дружественную. #pragma once; class Vector; class Matrix {
Перегрузка *= для матрицы C++
Matrix Matrix::operator *= (const Matrix &rhs) { Matrix result(*this); for (i=0; i<N; i++) { for (j=0; j<N; j++) {result.Mat=0; for (size_t i = 0; i < N; ++i) { for (size_t j = 0; j < M; ++j) result.Mat=0;
C++ Определить является ли матрица нулевой http://www.cyberforum.ru/cpp-beginners/thread1017975.html
Дана матрица целых чисел,из n строк и n столбцов (n<=100).Определить является ли матрица нулевой. помогите пожалуйста
C++ Найти количество максимальных элементов массива Дан массив а,состоящий из n целых чисел (n<=100).Найти количество максимальных элементов массива подробнее

Показать сообщение отдельно
caiman
 Аватар для caiman
11 / 11 / 1
Регистрация: 17.11.2013
Сообщений: 39
25.11.2013, 04:02     Правильность ввода даты
Писал когда-то класс для обработки дат:
Date.h:
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
#ifndef DATE_H
#define DATE_H
 
#include <iostream>
 
using namespace std;
 
class Date {
    private:
        unsigned short int day;
        unsigned short int month;
        int year;
 
    public:
        Date();
        Date(unsigned short int, unsigned short int, int);
        unsigned short int getDay() const;
        unsigned short int getMonth() const;
        int getYear() const;
        Date* getDate();
};
 
ostream& operator<<(ostream& out, const Date& date);
 
#endif
Date.cpp:
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
#include <iostream>
#include "date.h"
#include <iomanip>
#include <ctime>
 
class DayException{};
class MonthException{};
class FebruaryToHighException{};
 
Date::Date() {
    time_t t = time(0);
    
    struct tm * now = localtime( & t );
    year = (now->tm_year + 1900);
    month = (now->tm_mon + 1);
    day = now->tm_mday;
}
 
Date::Date(unsigned short int day, unsigned short int month, int year) {
    int leapYear = year % 4;
 
    if ( day < 1 || day > 31 ) {
        throw DayException();
    }
 
    if ( month < 1 || month > 12 ) {
        throw MonthException();
    }
 
    if ( month == 2 && day > 29 - leapYear ) {
        throw FebruaryToHighException();
    }
 
    if ( day > 30 + month % 2 ) {
        throw DayException();
    }
 
    this->day = day;
    this->month = month;
    this->year = year;
}
 
unsigned short int Date::getDay() const {
    return this->day;
}
 
unsigned short int Date::getMonth() const {
    return this->month;
}
 
int Date::getYear() const {
    return this->year;
}
 
ostream& operator<<(ostream& out, const Date& date) {
    out << setfill('0') << setw(2) << date.getDay() << '.';
    out << setw(2) << date.getMonth() << '.';
    out << setw(4) << date.getYear();
}
Разберешься.

Добавлено через 1 минуту
Считаешь строку, разобьешь по "." - отдашь объекту - он тебе провалидирует.

Добавлено через 30 минут
Не согласен с собственным классом! ))
Вот программка для проверки:
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
#include <iostream>
#include <string>
#include <cstdlib>
 
#define LIMIT 3
 
int main() {
    std::string date;
    std::string array[LIMIT];
    size_t position = 0;
    int index = 0;
    bool isLeap = false;
    bool isValidDate = true;
    int day, month, year;
 
    std::cin >> date;
 
    while ( (position = date.find('.')) != std::string::npos ) {
        std::string token = date.substr(0, position);
        array[index] = token;
        date.erase(0, position + 1);
        index += 1;
    }
    array[index] = date;
 
    day = atoi(array[0].c_str());
    month = atoi(array[1].c_str());
    year = atoi(array[2].c_str());
 
    if ( year % 4 == 0 ) {
        isLeap = true;
    }
    if ( day < 1 || day > 31 ) {
        isValidDate = false;
    }
    if ( month < 1 || month > 12 ) {
        isValidDate = false;
    }
    if ( month == 2 && day > 29 && isLeap == true ) {
        isValidDate = false;
    }
    if ( month == 2 && day > 28 && isLeap == false ) {
        isValidDate = false;
    }
    if ( month == 4 || month == 6 || month == 9 || month == 11 ) {
        if ( day > 30 ) {
            isValidDate = false;    
        }
    }
 
    if ( isValidDate ) {
        std::cout << "Date valid!" << std::endl;
    } else {
        std::cout << "Invalid date!" << std::endl;
    }
 
    return 0;
}
 
Текущее время: 11:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru