Печать даты в различных форматах

Pasha_0057

Напишите программу, которая считает даты в первом формате и печатет их во втором! 07/21/55 и Июль 21, 1995Кто знает?
14 ответов

Pasha_0057

хранить в контейнере элементы парами "название месяца" - "порядковый номер месяца", ну а дальше понятно думаю


Pasha_0057

хранить в контейнере элементы парами "название месяца" - "порядковый номер месяца", ну а дальше понятно думаю
А код программы написать можете?Кто сможет написать код программы?


Pasha_0057

с нуля за так наврядли кто то напишет, наработки пожалста или в раздел фриланс


Pasha_0057

Напишите программу, которая считает даты в первом формате и печатет их во втором! 07/21/55 и Июль 21, 1995
- что значит считает даты? Суть проста заведи 12-ть строковых литералов с названиями месяцев и когда скажем видишь 3-й месяц бери литерал март вот немного кода чтобы было понятно
char *pMONTH[] = {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"};
cout<<pMONTH[3 - 1]<<endl;


Pasha_0057

#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");
int a,b,c;  
cout<<"Введите дату:"<<endl;
char *pMONTH[] = {"","Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"};
 
    cout<<"Месяц: ";
    cin>>a;
    cout<<"День: ";
    cin>>b;
    cout<<"Год: ";
    cin>>c;
 
cout<<pMONTH[a]<<" "<<b<<" "<<"19"<<c<<endl;
 
    return 0;
}
Как сделать чтобы при вводе даты например от 1 до 20 он приписывал 20. А при вводе от 80 до 99 он приписывал 19. __________ Вот тут
cout<<pMONTH[a]<<" "<<b<<" "<<"19"<<c<<endl;
он просто переписывает 19!


Pasha_0057

А что, стандартные функции уже отменили? http://www.cplusplus.com/reference/ctime/


Pasha_0057

07/21/55 и Июль 21, 1995


Pasha_0057

-=ЮрА=-, печатают.
#include <ctime>
#include <iostream>
 
int main()
{
    setlocale (LC_ALL, "");
    char buf[100];
    time_t t = time(0);
    
    strftime( buf, sizeof(buf), "%B", localtime( &t ) );
    std::cout << buf << std::endl;
    system( "pause" );
}


Pasha_0057

Tulosba, никогда не замечал за ctime склонность к русскому http://codepad.org/IE18UaOy
Output: April
http://www.cplusplus.com/reference/ctime/strftime/ %B Full month name * - опять же английское отображение месяца.


Pasha_0057

Pasha_0057, как-то так. Писал "на коленке". Должно работать. Но нет проверки на ввод не корректной даты.
std::string month[] =  {
        "jun", "feb", "mar", "apr", "may", "jn", "jl", "aug", "sept", "oct", "nov", "dec"
    };
 
    std::string data("a 07/21/55 sadas12 324355 08/20/d00 0/20/95 08/20/95");
 
    std::smatch m;
    std::regex e("(\\d{2})/(\\d{2})/(\\d{2})");
 
    while (std::regex_search(data, m, e))
    {
        std::cout << month[std::stoi(m[0]) - 1] << " " << m[1] << " 19" << m[2] << std::endl;
        data = m.suffix().str();
    }
Но нет проверки на ввод не корректной даты.
Ладно. Вот так можно
#include <regex>
#include <string>
#include <vector>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string month[] =  {
        "jun", "feb", "mar", "apr", "may", "jn", "jl", "aug", "sept", "oct", "nov", "dec"
    };
 
    std::string data("a 07/21/55 sadas12 13/21/55 00/21/55 13/32/55 324355 08/20/d00 0/20/95 08/20/95");
 
    std::smatch m;
    std::regex e("(0[1-9]|1[012])/(0[1-9]|1[0-9]|2[0-9]|3[01])/(\\d{2})");
 
    while (std::regex_search(data, m, e))
    {
        std::cout << month[std::stoi(m[0]) - 1] << " " << m[1] << " 19" << m[2] << std::endl;
        data = m.suffix().str();
    }
    
    return 0;
}


Pasha_0057

никогда не замечал за ctime склонность к русскому
Тем не менее, на русской W7 VS2010 выводит. P.S. Жалко, не знаю какую локаль надо (и можно ли) подпихнуть ideone.com чтобы скушала


Pasha_0057

Зачем извращаться и писать велосипеды? Все же давно готово и на блюдечке с голубой каемочкой. http://www.boost.org/doc/libs/1_45_0/doc/html/date_time.html


Pasha_0057

Вот так.
#include <regex>
#include <string>
#include <vector>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string month[] =  {
        "jun", "feb", "mar", "apr", "may", "jn", "jl", "aug", "sept", "oct", "nov", "dec"
    };
 
    std::string data("a 07/21/55 sadas12 13/21/55 00/21/55 13/32/55 324355 08/20/d00 0/20/95 08/20/95");
 
    std::smatch m;
    std::regex e("(0[1-9]|1[012])/(0[1-9]|1[0-9]|2[0-9]|3[01])/(\\d{2})");
 
    while (std::regex_search(data, m, e))
    {
        std::cout << month[std::stoi(m[1]) - 1] << " " << m[2] << " 19" << m[3] << std::endl;
        data = m.suffix().str();
    }
    
    return 0;
}
Опять же. Нет проверки какой это год, т.е. кол-во дней в месяце. По дефолту от 1 до 31 включительно.


Pasha_0057

Да по Русски считают даты. там же написал
setlocale(LC_ALL, "rus");
он и распознает Русский
Вот так.
#include <regex>
#include <string>
#include <vector>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    std::string month[] =  {
        "jun", "feb", "mar", "apr", "may", "jn", "jl", "aug", "sept", "oct", "nov", "dec"
    };
 
    std::string data("a 07/21/55 sadas12 13/21/55 00/21/55 13/32/55 324355 08/20/d00 0/20/95 08/20/95");
 
    std::smatch m;
    std::regex e("(0[1-9]|1[012])/(0[1-9]|1[0-9]|2[0-9]|3[01])/(\\d{2})");
 
    while (std::regex_search(data, m, e))
    {
        std::cout << month[std::stoi(m[1]) - 1] << " " << m[2] << " 19" << m[3] << std::endl;
        data = m.suffix().str();
    }
    
    return 0;
}
Опять же. Нет проверки какой это год, т.е. кол-во дней в месяце. По дефолту от 1 до 31 включительно.
Дни он просто выводит число которое вводим. Месяцы он правильно выводит. А вот на счет года надо сделать чтобы он с 80 по 99 считал что это 1990.год А с 1 по 20 он считал что это 2000.год _________ А зачем все время писать STD? Его можно же в начале написать using namespace std;