Inserer une Date
Enelu
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je programme en C++ et j´aimerais creer un programme qui calcule le nombre de jour entre deux dates. La formule est écrite pas de plroblemes pour ca. Par contre
j´aimerais que l´utilisateur puisse inserer une date de la sorte 14.05.2016 et non :
Veuillez deonnez le jour de la date ... 14
Veuillez donn€ez le mois de la date ... 05
Veuillez donnez l´anné de la date ... 2016
Je ne sais pas si il me faut une bibliotheque speciale ou juste un type de variable que je ne connais pas encore.
Merci davance ^^
Je programme en C++ et j´aimerais creer un programme qui calcule le nombre de jour entre deux dates. La formule est écrite pas de plroblemes pour ca. Par contre
j´aimerais que l´utilisateur puisse inserer une date de la sorte 14.05.2016 et non :
Veuillez deonnez le jour de la date ... 14
Veuillez donn€ez le mois de la date ... 05
Veuillez donnez l´anné de la date ... 2016
Je ne sais pas si il me faut une bibliotheque speciale ou juste un type de variable que je ne connais pas encore.
Merci davance ^^
A voir également:
- Inserer une Date
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Insérer liste déroulante excel - Guide
- Insérer sommaire word - Guide
- Insérer une légende word - Guide
1 réponse
Bonjour,
Il faut parcourir la chaîne pour extraire les champs attendus.
Il y a de nombreuses méthodes :
Le spliter peut être trouvé, mais il s'écrit rapidement
On peut faire
Il faut parcourir la chaîne pour extraire les champs attendus.
Il y a de nombreuses méthodes :
- par les expressions régulières
- en utilisant un 'splitter' qui ici va chercher le séparateur '.'
- en itérant dans un std::istringstream
- le sscanf du langage C (c'est mal mais rapide en faisant std::sscanf(str.c_str(),"%u.%u.%u",&jour,&mois,&annee))
- et j'en oublie surement
Le spliter peut être trouvé, mais il s'écrit rapidement
std::vector<std::string> split( const std::string& str , const std::string& tok ) { std::vector<std::string> result; for ( int pos = 0 ; ; ) { std::size_t pos2 = str.find_first_of( tok.c_str() , pos ); if ( pos2 == std::string::npos ) { result.push_back( str.substr( pos ) ); // empiler le dernier mot break; } result.push_back( str.substr( pos , pos2 - pos ) ); // empiler le mot extrait pos = pos2 + tok.length(); // debut du suivant } return result; }On a alors une liste de chaînes qu'il reste à convertir en entier.
On peut faire
std::vector<std::string> vst = split("15.05.2016", "."); if ( vst.size()==3) { int jour = std::strtol( vst[0].c_str() , 0 , 10 ); int mois = std::strtol( vst[1].c_str() , 0 , 10 ); int annee = std::strtol( vst[2].c_str() , 0 , 10 ); }