Inserer une Date
Enelu
Messages postés
30
Statut
Membre
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
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 une légende word - Guide
- Insérer sommaire 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 );
}