std::time_get<CharT,InputIt>:: get_weekday, std::time_get<CharT,InputIt>:: do_get_weekday
|
Definiert im Header
<locale>
|
||
|
public
:
iter_type get_weekday
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(1) | |
|
protected
:
virtual
iter_type do_get_weekday
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(2) | |
do_get_weekday
der am meisten abgeleiteten Klasse auf.
[
beg
,
end
)
und analysiert den Wochentagsnamen (möglicherweise abgekürzt), unter Verwendung des Standardformats für Wochentage, das von dieser Locale erwartet wird, welches dasselbe Format ist wie
"%a"
, wie es von den Funktionen
std::get_time
,
time_get::get
und der POSIX-Funktion
strptime()
verwendet wird.
Wenn es einen abgekürzten Namen gefolgt von Zeichen findet, die für den vollständigen Namen gültig sind, liest es weiter, bis es alle Zeichen für den vollständigen Namen verarbeitet hat oder ein unerwartetes Zeichen findet, in welchem Fall das Parsing fehlschlägt, selbst wenn die ersten paar Zeichen eine gültige Abkürzung waren.
Der analysierte Wochentag wird im std::tm -Feld t - > tm_wday gespeichert.
Wenn der End-Iterator erreicht wird, bevor ein gültiger Wochentagsname gelesen wird, setzt die Funktion std::ios_base::eofbit in err . Wenn ein Parsing-Fehler auftritt, setzt die Funktion std::ios_base::failbit in err .
Inhaltsverzeichnis |
Parameter
| beg | - | Iterator, der den Start der zu parsenden Sequenz kennzeichnet |
| end | - | Iterator, der auf das Element nach dem Ende der zu parsenden Sequenz zeigt |
| str | - | Ein Stream-Objekt, das diese Funktion zur Beschaffung von Locale-Facets bei Bedarf verwendet, z.B. std::ctype zum Überspringen von Leerzeichen oder std::collate zum Vergleichen von Zeichenketten |
| err | - | Stream-Fehlerflags-Objekt, das von dieser Funktion modifiziert wird, um Fehler anzuzeigen |
| t | - | Zeiger auf das std::tm -Objekt, das das Ergebnis dieses Funktionsaufrufs enthält |
Rückgabewert
Iterator, der auf eine Position hinter das letzte Zeichen in
[
beg
,
end
)
zeigt, das als Teil eines gültigen Wochentagnamens erkannt wurde.
Hinweise
Diese Funktion ist in der Regel case-insensitive.
Wenn ein Parsing-Fehler auftritt, lassen die meisten Implementierungen dieser Funktion * t unverändert.
Beispiel
#include <initializer_list> #include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string_view> void try_get_wday(std::string_view s) { std::cout << "Wochentag aus '" << s << "' in der Locale " << std::locale().name() << '\n'; std::istringstream str{s.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_weekday({str}, {}, str, err, &t); str.setstate(err); std::istreambuf_iterator<char> last{}; if (str) { std::cout << "Erfolgreich geparst, Wochentagsnummer ist " << t.tm_wday; if (ret != last) { std::cout << " Verbleibender Inhalt: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << " die Eingabe wurde vollständig verarbeitet"; } else { std::cout << "Parsen fehlgeschlagen. Nicht geparster String: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; } void demo(std::string_view locale_name, std::initializer_list<std::string_view>&& data) { try { std::locale::global(std::locale(locale_name.data())); } catch (std::runtime_error const& ex) { std::cout << "Locale kann nicht eingerichtet werden: " << locale_name << "\n" "Exception: " << ex.what() << '\n'; return; } for (std::string_view const weekday : data) try_get_wday(weekday); } int main() { demo("lt_LT.utf8", {"Št", "Šeštadienis"}); demo("en_US.utf8", {"SATELLITE"}); demo("ja_JP.utf8", {"土曜日"}); }
Mögliche Ausgabe:
Ermittlung des Wochentags aus 'Št' in der Locale lt_LT.utf8 Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet Ermittlung des Wochentags aus 'Šeštadienis' in der Locale lt_LT.utf8 Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet Ermittlung des Wochentags aus 'SATELLITE' in der Locale en_US.utf8 Erfolgreich geparst, Wochentagnummer ist 6 Verbleibender Inhalt: ELLITE Ermittlung des Wochentags aus '土曜日' in der Locale ja_JP.utf8 Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 248 | C++98 |
eofbit
wurde beim Erreichen des End-Iterators nicht gesetzt
|
setzt
eofbit
wenn kein gültiger Wochentagsname gelesen wurde
|
Siehe auch
|
(C++11)
|
analysiert einen Datums-/Zeitwert im angegebenen Format
(Funktionsschablone) |