Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
1

Вывести дату в заданном формате

26.04.2010, 20:31. Просмотров 727. Ответов 14
Метки нет (Все метки)

В это задаче надо ввести дату 21/07/55 и что бы вывело в формате July 21, 1955
Но я не понимаю почемы выводит 21, 1955?Почему месяц не выводится?

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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
int main() 
{
        enum month { January, February, March, April, May, June, July, August, September, October, November, December };
        
        string date;
        cin >> date;
        int mon = atoi(date.c_str());
        switch(mon-1)
        {
        case January:
                cout << "January ";
                break;
        case February:
                cout << "February ";
                break;
        case March:
                cout << "March ";
                break;
        case April:
                cout << "April ";
                break;
        case May:
                cout << "May ";
                break;
        case June:
                cout << "June ";
                break;
        case July:
                cout<< "July ";
                break;
        case August:
                cout << "August ";
                break;
        case September:
                cout << "September ";
                break;
        case October:
                cout << "October ";
                break;
        case November:
                cout << "November ";
                break;
        case December:
                cout << "December ";
                break;
        }
        cout << date[0] << date[1] ;
       cout << ", 19"  << date[6]<< date[7] << endl;
       system("pause");
       return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2010, 20:31
Ответы с готовыми решениями:

Вывести содержимое файла в заданном формате
2: У вас есть файл input.txt содержащий строки вида qwe:as ewq1:f312 … Необходимо открыть файл...

Вывести информацию о каждом url в заданном формате
Допустим есть vector&lt;string&gt; содержащий url. Например: std::vector&lt;std::string&gt; url;...

Вывести двоичный код в массив в заданном формате
Необходимо вывести двоичный код в массив в таком формате 1 10 11 100 101 и т.д. до N-ого...

Вывести информацию о каждом url в заданном формате
Допустим есть vector&lt;string&gt; содержащий url. Например: std::vector&lt;std::string&gt; url; ...

14
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
27.04.2010, 20:40  [ТС] 2
Не у кого нет идей?
Ну или может кто то уже делал такую задачу, то пришлите свой вариант решения.
0
4335 / 1467 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
27.04.2010, 20:53 3
Mediaplay, хм... А перечисляемый тип кодируется как целые числа, начиная с нуля

Добавлено через 59 секунд
C++
1
2
3
4
5
6
int mon;
cin >> mon;
switch(mon)
{
...
}
0
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
27.04.2010, 21:09  [ТС] 4
Непонял тебя.
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
27.04.2010, 21:30 5
atoi("21/07/55") = 21
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 21:32 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
int main() 
{
        enum month {January = 1, February, March, April, May, June, July, August, September, October, November, December };
                
        string date;
        cin >> date;
        int mon = atoi(date.c_str());
        switch(mon)
        {
        case January:
                cout << "January ";
                break;
        case February:
                cout << "February ";
                break;
        case March:
                cout << "March ";
                break;
        case April:
                cout << "April ";
                break;
        case May:
                cout << "May ";
                break;
        case June:
                cout << "June ";
                break;
        case July:
                cout<< "July ";
                break;
        case August:
                cout << "August ";
                break;
        case September:
                cout << "September ";
                break;
        case October:
                cout << "October ";
                break;
        case November:
                cout << "November ";
                break;
        case December:
                cout << "December ";
                break;
        }
       cout << date[3] << date[4] ;
       cout << ", 19"  << date[6]<< date[7] << endl;
       system("pause");
       return 0;
}
не выводило, т.к. в месяц преобразовывались первые цифры до знака, не принадлежащего к цифрам
т.е. вы вводили 12/23/78
и в месяц преобразовывались первые 2 цифры (12)
в новом варианте при вводе 12/23/78 либо 12.23.78 либо 12!23!78, вобщем что угодно можо ставить между цифрами кроме пробела и на экране появится: December 23, 1978
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 540
27.04.2010, 21:35 7
Цитата Сообщение от Mediaplay Посмотреть сообщение
int mon = atoi(date.c_str());
выведите на экран результат этого присваивания и все поймете
или добавьте default в switch
0
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
27.04.2010, 22:36  [ТС] 8
Vorona но мне то радо вначале чисто а потом месяц 21/07/55
kukuruku310 про atoi я понял что эта функция делает. Но можно ли сделать чтобы функция начиналась с 3 позиции?
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 22:42 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

в 13 - 15 строках происходит преобразование 4 и 5ого символов в число
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 "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
 
int main() 
{
        enum month {January = 1, February, March, April, May, June, July, August, September, October, November, December };
                
        string date;
        cin >> date;
        int mon, i, i1;
    i = date[3] - 48;
    i1 = date[4] - 48;
    mon = i*10 + i1;
        switch(mon)
        {
        case January:
                cout << "January ";
                break;
        case February:
                cout << "February ";
                break;
        case March:
                cout << "March ";
                break;
        case April:
                cout << "April ";
                break;
        case May:
                cout << "May ";
                break;
        case June:
                cout << "June ";
                break;
        case July:
                cout<< "July ";
                break;
        case August:
                cout << "August ";
                break;
        case September:
                cout << "September ";
                break;
        case October:
                cout << "October ";
                break;
        case November:
                cout << "November ";
                break;
        case December:
                cout << "December ";
                break;
        }
       cout << date[0] << date[1] ;
       cout << ", 19"  << date[6]<< date[7] << endl;
       system("pause");
       return 0;
}
теперь вводите: число/месяц/год
1
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
27.04.2010, 22:54  [ТС] 10
Спасибо! Только зачем тут -48?
Цитата Сообщение от Vorona Посмотреть сообщение
i = date[3] - 48;
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
27.04.2010, 22:58 11
код "0" - 48, "1" - 49, ....
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 23:05 12
так преобразовываются элементы типа char в элементы типа int
можно и так:
C
1
i = date[3] - '0';
см.таблицу символов ASCII
ASCII код символа 0: 48, 1: 49, 2: 50
т.е, если
char a = 48;
или char a = '0';
int i = a;
то i будет равно 48, а если i = a-48, то получим 0
так же и с другими цифрами
если код цифры 6 = 54, то 54-48 = 6, что нам и нужно получить)
0
0 / 0 / 0
Регистрация: 05.12.2009
Сообщений: 39
27.04.2010, 23:16  [ТС] 13
i = date[3]
Козалось если так написано то это уже и есть 3-я позиция.
Но всеравно теперь более понятно)))
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
27.04.2010, 23:22 14
просто date[3] это элемент типа char(символы), а i - элемент типа int(только цифры)
и чтобы перевести символ в цифру, с которой можно будет производить математические операции, нам нужно провести немного махинаций
поскольку int не может иметь дела с символами типа char, то передается не сам символ, а его ASCII код, и вот если от этого кода отнять число 48, то в переменную типа int будет передана цифра, которая нам нужна)
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 540
28.04.2010, 12:15 15
Цитата Сообщение от Mediaplay Посмотреть сообщение
Но можно ли сделать чтобы функция начиналась с 3 позиции
так и укажите, откуда ей начинать atoi((const char *) &date[3])
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2010, 12:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести значение n-го члена арифметической прогрессии в заданном формате
На вход программы подаются три целых числа a1, a2 и n. a1 и a2 - первые два члена арифметической...

Вывести информацию в заданном формате без регулярных выражений
Задан vector&lt;string&gt; содержащий url. Например: std::vector&lt;std::string&gt; url; ...

Запросить на ввод значения часов и минут и вывести их в заданном формате
Доброго времени суток, форумчане. Просьба помочь с простыми программами на С++. Только начал...

Написать программу, которая предлагает пользователю ввести дату в формате YYYY MM DD и выводит в консоль, следующую за ней дату
вот еще одно =) Написать программу, которая предлагает пользователю ввести дату в формате YYYY...


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

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

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