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

Написать функцию convert (преобразовать) - C++

Восстановить пароль Регистрация
 
Александе еть я
25 / 25 / 0
Регистрация: 15.05.2010
Сообщений: 187
15.05.2010, 22:25     Написать функцию convert (преобразовать) #1
Написать функцию convert (преобразовать), получающую один параметр date типа строки, содержащий значение календарной даты в форме мм/дд/гг (месяц/день/год). Например, 14 декабря 1990 года будет изображено как 12/14/90. Задача функции состоит в преобразовании полученного значения к форме ‘Месяц, день, год’. Так результатом преобразования даты из примера должно стать ‘Декабрь, 14, 1990’ (предполагается, что все даты относятся к XX веку ).

подскажите как это можно сделать..у меня есть вариант с enum..но что-то не получается
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2010, 22:25     Написать функцию convert (преобразовать)
Посмотрите здесь:

C++ Написать функцию, которая могла бы передать значение в другую функцию
Не получается преобразовать типы указателей на функцию C++
Написать функцию, которая возвращает максимальное из двух чисел, которые переданы в функцию в качестве параметров C++
C++ Написать функцию, которая возвращает минимальное из двух чисел, которые переданы в функцию в качестве параметров
C++ Написать встроенную функцию min () и обычную функцию imin (), которые возвращают меньшее из двух целых значений
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,215
Завершенные тесты: 1
15.05.2010, 22:48     Написать функцию convert (преобразовать) #2
Цитата Сообщение от Александе еть я Посмотреть сообщение
у меня есть вариант с enum
выкладывайте свой результат - если у Вас не получается, то у форумчан получиться

Добавлено через 6 минут
т.е. поменять местами месяц с числом, и разделить лексемы запятыми?
Цитата Сообщение от Александе еть я Посмотреть сообщение
Например, 14 декабря 1990 года
Цитата Сообщение от Александе еть я Посмотреть сообщение
из примера должно стать ‘Декабрь, 14, 1990’
Из этого примера, на мой взгляд должно получиться "декабря, 14, 1990" или функция должна учитывать все варианты написания названий месяцев в русском языке?
Александе еть я
25 / 25 / 0
Регистрация: 15.05.2010
Сообщений: 187
16.05.2010, 11:38  [ТС]     Написать функцию convert (преобразовать) #3
да. надо просто поменять местами месяц и число..но мы вводим,как в том примере дату в таком формате 12/14/90.
нет. функция не должна учитывать все написания..т.е. может быть как "Декабрь"..так и "декабрь"
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
16.05.2010, 13:02     Написать функцию convert (преобразовать) #4
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
//Написать функцию convert (преобразовать), получающую один параметр date типа строки, 
//содержащий значение календарной даты в форме мм/дд/гг (месяц/день/год). 
//Например, 14 декабря 1990 года будет изображено как 12/14/90. 
//Задача функции состоит в преобразовании полученного значения к форме 
//‘Месяц, день, год’. Так результатом преобразования даты из примера должно стать 
//‘Декабрь, 14, 1990’ (предполагается, что все даты относятся к XX веку ).
#include <string>
#include <sstream>
#include <vector>
#include <iostream>
#include <locale>
 
std::string convert_data(std::string data_m_d_y)
{     
    std::istringstream data_potok(data_m_d_y);
    size_t moon_count;
    data_potok >> moon_count;
    if(data_potok.peek() == '/')
    {
        data_potok.ignore();
    }
    size_t day_count;
    data_potok >> day_count;
    if(data_potok.peek() == '/')
    {
        data_potok.ignore();
    }
    size_t year_count;
    data_potok >> year_count;
 
    bool moon_count_is_correct  = 1 <= moon_count && moon_count <= 12;
    bool day_count_is_correct   = 1 <= day_count  && day_count  <= 31;
    bool year_count_is_correct  = 0 <= year_count && year_count <= 99;
    if(!moon_count_is_correct
      || !day_count_is_correct
      || !year_count_is_correct)
    {
        return "Bad data!";
    }
    typedef std::vector<std::string> T_strings;
    T_strings moon_names;
    moon_names.push_back("Январь");
    moon_names.push_back("Февраль");
    moon_names.push_back("Март");
    moon_names.push_back("Апрель");
    moon_names.push_back("Май");
    moon_names.push_back("Июнь");
    moon_names.push_back("Июль");
    moon_names.push_back("Август");
    moon_names.push_back("Сентябрь");
    moon_names.push_back("Октябрь");
    moon_names.push_back("Ноябрь");
    moon_names.push_back("Декабрь");
 
    std::ostringstream res_potok;
    res_potok << moon_names[moon_count - 1]
              << ", "
              << day_count
              << ", "
              << year_count + 1900;
    return res_potok.str();
}
 
int main()
{
    std::locale::global(std::locale("rus"));
    for(;;)
    {        
        std::string data_m_d_y;
        std::cout << "Input data mm/dd/yy: ";
        std::cin >> data_m_d_y;
        std::cout << convert_data(data_m_d_y)
                  << std::endl
                  << std::endl;    
    }
    return 0;
}
Александе еть я
25 / 25 / 0
Регистрация: 15.05.2010
Сообщений: 187
16.05.2010, 15:39  [ТС]     Написать функцию convert (преобразовать) #5
мне б тоже самое только на си..))) я вообще не шарю с++.
Yandex
Объявления
16.05.2010, 15:39     Написать функцию convert (преобразовать)
Ответ Создать тему
Опции темы

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