0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9

Распарсить строку и записать дату рождения в три целочисленные переменные - отдельно день, месяц и год

07.01.2016, 22:48. Показов 5176. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Столкнулся с такой проблемой, дана строка(дата рождения, числа разделены двоеточиями ) ,из нее нужно записать все в переменные день месяц год.
14:11:1997 int dd=14,mm=11,yy=1997;
Может кто подскажет функцию которая делит строку?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2016, 22:48
Ответы с готовыми решениями:

Отдельно дату, месяц, день недели, год, часов, минут, секунд
Всем привет! что то мучаюсь никак не догоню как по отдельности получить из такой строки 11.02.2020 11:41:29 дату,...

Заданы день и месяц рождения, а также текущие день, месяц и год. Определить, сколько дней осталось до дня рождения
заданы день и месяц рождения, а также текущие день, месяц и год. Определить, сколько дней осталось до дня рождения

Ввести дату и разбить ее на три отдельные составляющие: день, месяц и год
1. Ввести дату и разбить ее на три отдельные составляющие: день, месяц и год.

11
 Аватар для SergioO
261 / 209 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
07.01.2016, 23:09
http://ru.cppreference.com/w/c... sic_string
0
 Аватар для Зи
92 / 11 / 10
Регистрация: 09.12.2015
Сообщений: 30
07.01.2016, 23:52
даже если вы поделите строку, вам все равно нужно будет сделать преобразование типов. вот, что предлагаю я. не знаю, может кто-нибудь предложит вариант получше моего. p.s если бы у вас вместо двоеточий были пробелы, все бы было проще: сики бы не понадобились
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
 
void main()
{
    string str = "14:11:1997";
    stringstream ss;
    int dd, mm, yy;
    ss << str;
    ss >> dd;
    ss.seekg(3);
    ss >> mm;
    ss.seekg(6);
    ss >> yy;
    cout << dd << endl;
    cout << mm << endl;
    cout << yy << endl;
    system("pause");
 
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.01.2016, 01:10
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
/*
Столкнулся с такой проблемой, дана строка(дата рождения, числа разделены двоеточиями ) ,
из нее нужно записать все в переменные день месяц год.
14:11:1997 int dd=14,mm=11,yy=1997;
*/
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        std::cout   <<  "\n\nInput date in format dd:mm:yyyy -> ";
        T_str   date_str;
        getline( std::cin,  date_str );
        size_t  end_ind{};
 
        try
        {
            auto    dd_int  =   stoi    (
                                            date_str,
                                            &end_ind
                                        );
 
            date_str.erase( 0,  ++end_ind );
 
            auto    mm_int  =   stoi    (
                                            date_str,
                                            &end_ind
                                        );
 
            date_str.erase( 0,  ++end_ind );
 
            auto    yy_int  =   stoi    ( date_str );
 
            std::cout   <<  "dd = "
                        <<  dd_int
                        <<  std::endl
 
                        <<  "mm = "
                        <<  mm_int
                        <<  std::endl
 
                        <<  "yy = "
                        <<  yy_int
                        <<  std::endl;
        }
        catch(...)
        {
            std::cout   <<  "String is invalid."
                        <<  std::endl;
        }
    };
}
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
08.01.2016, 03:11
Цитата Сообщение от Зи Посмотреть сообщение
p.s если бы у вас вместо двоеточий были пробелы, все бы было проще: сики бы не понадобились
C++
1
2
3
4
5
6
7
 
    ss << str;
    (ss >> dd).get();
    //ss.seekg(3);
    (ss >> mm).get();
    //ss.seekg(6);
    ss >> yy;
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.01.2016, 08:46
Ну, можно еще в цикле обрабатывать:
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
/*
дана строка(дата рождения, числа разделены двоеточиями) ,
из нее нужно записать все в переменные день месяц год.
14:11:1997 int dd=14,mm=11,yy=1997;
*/
///////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include <vector>
///////////////////////////////////////////////////////////////////////////////
typedef std::string                 T_str;
typedef std::vector     < int   >   T_int_values;
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    for(;;)
    {
        std::cout   <<  "\n\nInput date in format dd:mm:yyyy -> ";
        T_str   date_str;
        getline( std::cin,  date_str );
        size_t  end_ind{};
 
        try
        {
            T_int_values    int_date_values;
 
            for( int  i = 0; i < 3; ++i )
            {
                int_date_values.push_back
                    (
                        stoi    (
                                    date_str,
                                    &end_ind
                                )
                    );
 
                date_str.erase( 0,  ++end_ind );
            }
 
            std::cout   <<  "dd = "
                        <<  int_date_values[0]
                        <<  std::endl
 
                        <<  "mm = "
                        <<  int_date_values[1]
                        <<  std::endl
 
                        <<  "yy = "
                        <<  int_date_values[2]
                        <<  std::endl;
        }
        catch(...)
        {
            std::cout   <<  "String is invalid."
                        <<  std::endl;
        }
    };
}
Добавлено через 14 минут
Зи, nord_v, ваш вариант плох тем, что если ввести некорректную строку, то программа это никак не определит, а просто выдаст некорректный результат.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
08.01.2016, 09:09
Цитата Сообщение от Mr.X Посмотреть сообщение
Зи, nord_v, ваш вариант плох тем, что если ввести некорректную строку, то программа это никак не определит, а просто выдаст некорректный результат.
Согласен, но исхожу из того, что ТС пишет:
Цитата Сообщение от Makeey Посмотреть сообщение
дана строка(дата рождения, числа разделены двоеточиями ) ,из нее нужно записать все в переменные день месяц год.
14:11:1997 int dd=14,mm=11,yy=1997;
Т.е., строка не вводится, а дана в уже определённом формате.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
08.01.2016, 10:17
Ещё можно добавить в локаль потока нужные разделители и читать так же, как если бы там были пробелы.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
08.01.2016, 11:44
Цитата Сообщение от Somebody Посмотреть сообщение
Ещё можно добавить в локаль потока нужные разделители и читать так же, как если бы там были пробелы.
Ну напишите примерчик.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
08.01.2016, 12:09
Да можно как угодно извращаться Нужно понимать контекст, какое именно поведение нужно. Например, чтобы выбрать между теми же sscanf и get_time.

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
#include <iostream>
#include <sstream>
#include <string>
#include <locale>
#include <ctime>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
 
int main() {
    std::string input = "1:6:97875657";
    std::tm t {};
#if 0
    if (std::sscanf(input.c_str(), "%d:%d:%d", &t.tm_mday, &t.tm_mon, &t.tm_year) != 3) {
        std::cout << "Fail\n";
        return EXIT_FAILURE;
    }
    --t.tm_mon;
    t.tm_year -= 1900;
#endif
#if 0
    std::istringstream ss(input);
    ss >> std::get_time(&t, "%d:%m:%Y");
    if (ss.fail()) {
        std::cout << "Fail\n";
        return EXIT_FAILURE;
    }
#endif
    std::cout << t.tm_mday << " " << t.tm_mon + 1 << " " << t.tm_year + 1900;
}
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
08.01.2016, 12:12
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну напишите примерчик.
Моё дело - предложить идею ) В общем, что-то типа такого (пример внизу):
http://en.cppreference.com/w/cpp/locale/ctype_char
0
0 / 0 / 0
Регистрация: 12.09.2015
Сообщений: 9
08.01.2016, 14:06  [ТС]
Спасибо всем огромное, буду сидеть ковыряться дальше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2016, 14:06
Помогаю со студенческими работами здесь

Календарь: записать в переменные выбранные день, месяц, год.
У меня стоит календарь (смотреть в прикреплённом файле). Подскажите, как отдельно записать в переменные день, месяц, год выбранные день,...

Даны три натуральных числа обозначают день месяц и год, указать дату предыдущего дня
Даны три натуральных числа обозначают день месяц и год.Указать дату предыдущего дня

Даны три числа: день, месяц, год. Вывести дату предыдущего дня, учитывая особенности високосного года
Даны три числа: D(день),M(число),V(год).Вывести дату предыдущего дня учитывая особенности високосного года.

Ввести день, месяц, год рождения. чтобы определился знак вашего зодиака по дате рождения. Неправильно работает программа
Создайте консольное приложение. Напишите программу, с помощью которой можно будет наглядно ввести день, месяц (в численном выражение) и...

Как вывести отдельно дату, месяц и год который сейчас на данный момент?
Я хочу попробовать сделать программу, в которой выполняется следующий алгоритм: 1) Пользователь вводит день, месяц, год 2) Мы...


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

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

Новые блоги и статьи
Система статов в Unity
GameUnited 20.04.2025
Статы — фундаментальный элемент игрового дизайна, который определяет характеристики персонажей, предметов и других объектов в игровом мире. Будь то показатель силы в RPG, скорость передвижения в. . .
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru