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

Время в формате hh:mm:ss - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
16.01.2012, 14:58     Время в формате hh:mm:ss #1
Задача такая что программа требовает время в формате HH:MM:SS, проверяет ввод и выдает заявление, например - 23:09:03 - правильно,
2:2:2 - неправильный формат,
12:02:94 - неправильное время,
14.05.35 - неправильный формат,
qw2:we34 - неправильный формат.

Уже сделал,но вывод поможете правильно формолировать?

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
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
bool isValidTime(int, int, int);
const char delim = ':';
 
int main(int argc, char *argv[]) {
    string in;
    stringstream ss;
    char c1, c2;
    int hr, min, sec;
 
    cout << "Enter HH:MM:SS : " << endl;
    while (true) {
        cout << "> ";
        getline(cin,in);
        ss.clear(); ss.str(in);
        if ((ss >> hr >> c1 >> min >> c2 >> sec) &&
                (c1 == delim) && (c1 == c2) &&
                isValidTime(hr, min, sec)) {
            cout << "ok" << endl;
        } else {
            cout << "invalid time" << endl;
        }
    }
    return 0;
}
 
bool isValidTime(int hr, int min, int sec) {
    return (((hr >= 0) && (hr < 24)) &&
                    ((min >= 0) && (min < 60)) &&
                    ((sec >= 0) && (sec< 60)));
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2012, 14:58     Время в формате hh:mm:ss
Посмотрите здесь:

C++ Можно ли ввести своё время в формате hh:mm:ss?
C++ Функция: Написать функцию next(t, t1, d), которая присваивает параметру t1 время на d секунд больше, чем время t.
C++ Пользователь вводит текущее время в формате: часы:минута и если 0:00 - 5:59 программа пишет Night, если 6:00-11:59 morning
C++ Записи. Дано время t1 и время t2. Определить, сколько времени пройдет от t1 до t2
Задача на струтуру. В выходной файл выведите время, оставшееся от t1 до t2 в формате hh:mm:ss C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.01.2012, 15:28     Время в формате hh:mm:ss #2
Цитата Сообщение от extremx Посмотреть сообщение
Задача такая что программа требовает время в формате HH:MM:SS, проверяет ввод и выдает заявление, например - 23:09:03 - правильно,
2:2:2 - неправильный формат,
12:02:94 - неправильное время,
14.05.35 - неправильный формат,
qw2:we34 - неправильный формат.
У вас будет неправильно работать, если ввести 2:2: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 <algorithm>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
 
bool is_correct_format( std::string str )
{
    const boost::regex pattern("\\d\\d:\\d\\d:\\d\\d");
    
    return regex_match(str, pattern);
}
 
bool is_correct_time( std::string str )
{
    int hour = boost::lexical_cast< int > ( str.substr(0, 2 ) );
    int minutes = boost::lexical_cast< int > ( str.substr(3, 2 ) );
    int seconds = boost::lexical_cast< int > ( str.substr(6, 2 ) );
    
    return hour < 24 && minutes < 60 && seconds < 60;
}
 
int main()
{
    
    std::string date;
    std::cin >> date;
    
    if ( !is_correct_format(date) )
        std::cout << "Invalid format!" << std::endl;
    else
        std::cout << ( is_correct_time(date) ? "OK" : "Invalid time!" )
                  << std::endl;
}
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
16.01.2012, 15:40  [ТС]     Время в формате hh:mm:ss #3
Цитата Сообщение от diagon Посмотреть сообщение
У вас будет неправильно работать, если ввести 2:2: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 <algorithm>
#include <boost/regex.hpp>
#include <boost/lexical_cast.hpp>
 
bool is_correct_format( std::string str )
{
    const boost::regex pattern("\\d\\d:\\d\\d:\\d\\d");
    
    return regex_match(str, pattern);
}
 
bool is_correct_time( std::string str )
{
    int hour = boost::lexical_cast< int > ( str.substr(0, 2 ) );
    int minutes = boost::lexical_cast< int > ( str.substr(3, 2 ) );
    int seconds = boost::lexical_cast< int > ( str.substr(6, 2 ) );
    
    return hour < 24 && minutes < 60 && seconds < 60;
}
 
int main()
{
    
    std::string date;
    std::cin >> date;
    
    if ( !is_correct_format(date) )
        std::cout << "Invalid format!" << std::endl;
    else
        std::cout << ( is_correct_time(date) ? "OK" : "Invalid time!" )
                  << std::endl;
}
Там многие не определени, например boost, pattern, так-же regex_match и так далее.
cyberobot
 Аватар для cyberobot
15 / 15 / 1
Регистрация: 01.09.2011
Сообщений: 66
16.01.2012, 15:41     Время в формате hh:mm:ss #4
может классом описать
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.01.2012, 15:48     Время в формате hh:mm:ss #5
Цитата Сообщение от extremx Посмотреть сообщение
Там многие не определени, например boost, pattern, так-же regex_match и так далее.
Значит у вас boost'a нету.
Ну тогда то же самое с помощью стандартной библиотеки С
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
#include <iostream>
#include <algorithm>
#include <cctype> 
#include <cstdlib>
 
bool is_correct_format( const std::string& str )
{       
    const char delim = ':';
    
    return str.size() == 8 &&
    isdigit(str[0]) && isdigit(str[1]) && str[2] == delim &&
    isdigit(str[3]) && isdigit(str[4]) && str[5] == delim &&
    isdigit(str[6]) && isdigit(str[7]);
}
 
bool is_correct_time( const std::string& str )
{
        int hour = atoi( str.substr(0, 2 ).c_str() );
        int minutes = atoi( str.substr(3, 2 ).c_str() );
        int seconds = atoi( str.substr(6, 2 ).c_str() );
        
        return hour < 24 && minutes < 60 && seconds < 60;
}
 
int main()
{
        
        std::string date;
        std::cin >> date;
        
        if ( !is_correct_format(date) )
                std::cout << "Invalid format!" << std::endl;
        else
                std::cout << ( is_correct_time(date) ? "OK" : "Invalid time!" )
                                  << std::endl;
}
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
16.01.2012, 16:15  [ТС]     Время в формате hh:mm:ss #6
Цитата Сообщение от diagon Посмотреть сообщение
Значит у вас boost'a нету.
Ну тогда то же самое с помощью стандартной библиотеки С
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
#include <iostream>
#include <algorithm>
#include <cctype> 
#include <cstdlib>
 
bool is_correct_format( const std::string& str )
{       
    const char delim = ':';
    
    return str.size() == 8 &&
    isdigit(str[0]) && isdigit(str[1]) && str[2] == delim &&
    isdigit(str[3]) && isdigit(str[4]) && str[5] == delim &&
    isdigit(str[6]) && isdigit(str[7]);
}
 
bool is_correct_time( const std::string& str )
{
        int hour = atoi( str.substr(0, 2 ).c_str() );
        int minutes = atoi( str.substr(3, 2 ).c_str() );
        int seconds = atoi( str.substr(6, 2 ).c_str() );
        
        return hour < 24 && minutes < 60 && seconds < 60;
}
 
int main()
{
        
        std::string date;
        std::cin >> date;
        
        if ( !is_correct_format(date) )
                std::cout << "Invalid format!" << std::endl;
        else
                std::cout << ( is_correct_time(date) ? "OK" : "Invalid time!" )
                                  << std::endl;
}
Ну значит не было boost'a,а теперь все нормально. Большое спасибо!
Yandex
Объявления
16.01.2012, 16:15     Время в формате hh:mm:ss
Ответ Создать тему
Опции темы

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