std::time_get<CharT,InputIt>:: get_monthname, std::time_get<CharT,InputIt>:: do_get_monthname
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
iter_type get_monthname
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(1) | |
|
protected
:
virtual
iter_type do_get_monthname
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(2) | |
do_get_monthname
de la classe la plus dérivée.
[
beg
,
end
)
et analyse le nom du mois (éventuellement abrégé), en utilisant le format par défaut pour les noms de mois attendu par cette locale, qui est le même format que
"%b"
utilisé par les fonctions
std::get_time
,
time_get::get
, et la fonction POSIX
strptime()
.
S'il trouve un nom abrégé, suivi des caractères valides pour le nom complet, il continue la lecture jusqu'à ce qu'il consomme tous les caractères du nom complet ou trouve un caractère non attendu, auquel cas l'analyse échoue même si les premiers caractères formaient une abréviation valide.
Le mois analysé est stocké dans le champ std::tm t - > tm_mon .
Si l'itérateur de fin est atteint avant qu'un nom de mois valide soit lu, la fonction positionne std::ios_base::eofbit dans err . Si une erreur d'analyse est rencontrée, la fonction positionne std::ios_base::failbit dans err .
Table des matières |
Paramètres
| beg | - | itérateur désignant le début de la séquence à analyser |
| end | - | itérateur pointant après la fin de la séquence à analyser |
| str | - | objet de flux utilisé par cette fonction pour obtenir les facettes de locale lorsque nécessaire, par ex. std::ctype pour ignorer les espaces blancs ou std::collate pour comparer des chaînes |
| err | - | objet d'indicateurs d'erreur de flux modifié par cette fonction pour signaler les erreurs |
| t | - | pointeur vers l'objet std::tm qui contiendra le résultat de cet appel de fonction |
Valeur de retour
Itérateur pointant un caractère au-delà du dernier caractère dans
[
beg
,
end
)
qui a été reconnu comme faisant partie d'un nom de mois valide.
Notes
Cette fonction est généralement insensible à la casse.
Si une erreur d'analyse syntaxique est rencontrée, la plupart des implémentations de cette fonction laissent * t inchangé.
Exemple
#include <ctime> #include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string_view> void try_get_mon(std::string_view locale_name, std::string_view source) { try { std::locale::global(std::locale(locale_name.data())); } catch (std::runtime_error const& ex) { std::cout << "Cannot setup locale: " << locale_name << "\n" "Exception: " << ex.what() << '\n'; return; } std::cout << "Parsing the month out of '" << source << "' in the locale " << std::locale().name() << '\n'; std::istringstream str{source.data()}; std::ios_base::iostate err = std::ios_base::goodbit; std::tm t; std::time_get<char> const& facet = std::use_facet<std::time_get<char>>(str.getloc()); std::istreambuf_iterator<char> ret = facet.get_monthname({str}, {}, str, err, &t); str.setstate(err); std::istreambuf_iterator<char> last{}; if (str) { std::cout << "Successfully parsed, month number is " << t.tm_mon; if (ret != last) { std::cout << ". Remaining content: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << ". The input was fully consumed"; } else { std::cout << "Parse failed. Unparsed string: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; } int main() { try_get_mon("ja_JP.utf8", "2月"); try_get_mon("th_TH.utf8", "กุมภาพันธ์"); try_get_mon("el_GR.utf8", "Φεβ"); try_get_mon("el_GR.utf8", "Φεβρουάριος"); try_get_mon("en_US.utf8", "Febrile"); }
Sortie possible :
Parsing the month out of '2月' in the locale ja_JP.utf8 Successfully parsed, month number is 1. The input was fully consumed Parsing the month out of 'กุมภาพันธ์' in the locale th_TH.utf8 Successfully parsed, month number is 1. The input was fully consumed Parsing the month out of 'Φεβ' in the locale el_GR.utf8 Successfully parsed, month number is 1. The input was fully consumed Parsing the month out of 'Φεβρουάριος' in the locale el_GR.utf8 Successfully parsed, month number is 1. The input was fully consumed Parsing the month out of 'Febrile' in the locale en_US.utf8 Parse failed. Unparsed string: ile
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 248 | C++98 |
eofbit
n'était pas défini lors de l'atteinte de l'itérateur de fin
|
définit
eofbit
si un nom de mois valide n'a pas été lu
|
Voir aussi
|
(C++11)
|
analyse une valeur de date/heure au format spécifié
(modèle de fonction) |