Namespaces
Variants

std::time_get<CharT,InputIt>:: get_monthname, std::time_get<CharT,InputIt>:: do_get_monthname

From cppreference.net
Défini dans l'en-tête <locale>
public :

iter_type get_monthname ( iter_type beg, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(1)
protected :

virtual iter_type do_get_monthname ( iter_type beg, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(2)
1) Fonction membre publique, appelle la fonction membre virtuelle protégée do_get_monthname de la classe la plus dérivée.
2) Lit successivement les caractères de la séquence [ 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)