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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
#1

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

16.01.2012, 14:58. Просмотров 2005. Ответов 5
Метки нет (Все метки)

Задача такая что программа требовает время в формате 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)));
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2012, 14:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Время в формате hh:mm:ss (C++):

Время задается в формате чч:мм:сс - C++
Время задается в формате чч:мм:сс. С учетом суток реализовать: сложение времени и определенного пользователем числа секунд, вычитание из...

Вывести текущее время в формате ЧЧ:ММ:СС - C++
я хочу из time(0), получить время (ЧЧ:ММ:СС). что я делаю не так? или есть более лёгкий способ его получения? вот мой код, но он...

Как получить текущее время в формате чч:мм:сс - C++
Подскажите, есть необходимость получить текущее время в формате чч:мм:сс, как это реализовать?

Можно ли ввести своё время в формате hh:mm:ss? - C++
снова вопрос, можно ли как нибудь ввести своё время в формате HH:MM:SS и потом произвести вычисления над ним

Написать функцию, выводящую время, введённое пользователем, в заданном формате - C++
Здравствуйте! Стоит задача: напишите программу, которая выдает запрос на ввод значений часов и минут. Функция main() должна передать эти...

Задача на струтуру. В выходной файл выведите время, оставшееся от t1 до t2 в формате hh:mm:ss - C++
Дано время t1 и время t2. Гарантируется, что t1 и t2 -время одного дня, а также что t1&lt;t2. Определить, сколько времени пройдет от t1 до t2....

5
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.01.2012, 15:28 #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;
}
0
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
16.01.2012, 15:40  [ТС] #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 и так далее.
0
cyberobot
15 / 15 / 1
Регистрация: 01.09.2011
Сообщений: 66
16.01.2012, 15:41 #4
может классом описать
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.01.2012, 15:48 #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;
}
0
extremx
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 11
16.01.2012, 16:15  [ТС] #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,а теперь все нормально. Большое спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 16:15
Привет! Вот еще темы с ответами:

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

На основе исходных трёх файлов сформировать новый, содержащий время в формате "чч:мм:сс" - C++
Даны три файла, содержащие одинаковое количество чисел. Сформировать новый файл, содержащий время в формате &quot;чч:мм:сс&quot;, где часы берутся из...

Пользователь вводит текущее время в формате: часы:минута и если 0:00 - 5:59 программа пишет Night, если 6:00-11:59 morning - C++
Помогите написать код для этой задачи(на С++): Пользователь вводит текущее время в формате: часы:минута и если 0:00 - 5:59 программа...

Напишите программу, которая бы читала дерево в формате (а) и затем печатала бы это дерево в формате (б). - C++
Представление дерева: а) Д (Б (А, Ф (В,)), Е (,З (Ж, И))) б) Д Б А Ф ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
16.01.2012, 16:15
Ответ Создать тему
Опции темы

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