Inserer une Date
Enelu
Messages postés
30
Statut
Membre
-
Dalfab Messages postés 638 Date d'inscription Statut Membre Dernière intervention -
Dalfab Messages postés 638 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 ^^
1 réponse
-
Bonjour,
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 rapidementstd::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 fairestd::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 ); }