std::time_get<CharT,InputIt>:: get_weekday, std::time_get<CharT,InputIt>:: do_get_weekday
|
Definido en el encabezado
<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
de la clase más derivada.
[
beg
,
end
)
y analiza el nombre del día de la semana (posiblemente abreviado), utilizando el formato predeterminado para días de la semana esperado por esta configuración regional, que es el mismo formato que
"%a"
utilizado por las funciones
std::get_time
,
time_get::get
, y la función POSIX
strptime()
.
Si encuentra un nombre abreviado, seguido de caracteres que son válidos para el nombre completo, continúa leyendo hasta que consume todos los caracteres para el nombre completo o encuentra un carácter que no es esperado, en cuyo caso el análisis falla incluso si los primeros caracteres eran una abreviatura válida.
El día de la semana analizado se almacena en el campo std::tm t - > tm_wday .
Si se alcanza el iterador final antes de leer un nombre de día de la semana válido, la función establece std::ios_base::eofbit en err . Si se encuentra un error de análisis, la función establece std::ios_base::failbit en err .
Contenidos |
Parámetros
| beg | - | iterador que designa el inicio de la secuencia a analizar |
| end | - | iterador que apunta más allá del final de la secuencia a analizar |
| str | - | objeto de flujo que esta función utiliza para obtener facetas de configuración regional cuando es necesario, ej. std::ctype para omitir espacios en blanco o std::collate para comparar cadenas |
| err | - | objeto de indicadores de error de flujo que es modificado por esta función para indicar errores |
| t | - | puntero al objeto std::tm que contendrá el resultado de esta llamada a función |
Valor de retorno
Iterador que apunta una posición después del último carácter en
[
beg
,
end
)
que fue reconocido como parte de un nombre de día de la semana válido.
Notas
Esta función suele ser insensible a mayúsculas y minúsculas.
Si se encuentra un error de análisis, la mayoría de las implementaciones de esta función dejan * t sin modificar.
Ejemplo
#include <initializer_list> #include <iostream> #include <iterator> #include <locale> #include <sstream> #include <string_view> void try_get_wday(std::string_view s) { std::cout << "Analizando el día de la semana de '" << s << "' en la configuración regional " << 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 << "Análisis exitoso, el número del día de la semana es " << t.tm_wday; if (ret != last) { std::cout << " Contenido restante: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << " la entrada fue completamente consumida"; } else { std::cout << "Análisis fallido. Cadena no analizada: "; 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 << "No se puede configurar la configuración regional: " << locale_name << "\n" "Excepción: " << 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", {"土曜日"}); }
Salida posible:
Analizando el día de la semana de 'Št' en la configuración regional lt_LT.utf8 Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente Analizando el día de la semana de 'Šeštadienis' en la configuración regional lt_LT.utf8 Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente Analizando el día de la semana de 'SATELLITE' en la configuración regional en_US.utf8 Analizado exitosamente, el número del día de la semana es 6 Contenido restante: ELLITE Analizando el día de la semana de '土曜日' en la configuración regional ja_JP.utf8 Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 248 | C++98 |
eofbit
no se establecía al alcanzar el iterador final
|
establece
eofbit
si no se ha leído un nombre de día de la semana válido
|
Véase también
|
(C++11)
|
analiza un valor de fecha/hora con formato especificado
(plantilla de función) |