C++ 20 viene con una serie de nuevas características y mejoras, incluida la formato() función. En este artículo, exploraremos cómo se puede usar std::format para formatear cadenas en C++20.
C++20 – estándar::formato
std::format es una nueva función introducida en C++ 20 que proporciona una forma de formatear cadenas reemplazando marcadores de posición dentro de una cadena de formato con los valores de los argumentos proporcionados. Los marcadores de posición se representan usando {} dentro de la cadena de formato.
Sintaxis:
std::string std::format(std::string_view format_string, Args... args);>
Tipo de devolución: La función devuelve una std::string que contiene la salida formateada.
En C++20, se introduce un nuevo tipo de datos denominado std::string_view, que proporciona una vista de la cadena subyacente. Funciona de manera similar a un puntero a una cadena pero con características adicionales de seguridad y conveniencia. Args… representa un parámetro variado, lo que significa que la función std::format puede tomar un número variable de argumentos de cualquier tipo.
Ejemplos de C++ 20 – std::format
Ejemplo 1:
El siguiente código demuestra cómo usar std::format para formatear una cadena con marcadores de posición para variables.
C++
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > using> namespace> std;> > int> main()> {> > // Declare variables> > int> num = 42;> > std::string name => 'John'> ;> > > // Use std::format to format a string with placeholders> > // for variables> > std::string formatted_str = std::format(> > 'My name is {} and my favorite number is {}'> , name,> > num);> > > // Print formatted string to console> > std::cout << formatted_str << std::endl;> > > return> 0;> }> |
>
>
Producción
My name is John and my favorite number is 42>
En el ejemplo anterior, tenemos una cadena de formato que contiene dos marcadores de posición, {}. Pasamos los valores de las variables nombre y número a la función std::format, que reemplaza los marcadores de posición con los valores de las variables. La cadena resultante se almacena en la variable formatted_str, que luego se imprime en la consola.
Ejemplo 2:
En el siguiente ejemplo, entenderemos los argumentos posicionales con std::format.
C++
cadena java.formato
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > // Declare an integer variable named num> > // and initialize it with the value 42> > int> num = 42;> > // Declare a string variable named name> > // and initialize it with the value 'John'> > std::string name => 'John'> ;> > > // Call the std::format function to create a formatted> > // string with placeholders for num and name The first> > // placeholder is represented by {0} and is replaced by> > // the value of num The second placeholder is> > // represented by {1} and is replaced by the value of> > // name> > std::string formatted_str = std::format(> > 'My name is {1} and my favorite number is {0}'> , num, name);> > > // Print the formatted string to the console> > std::cout << formatted_str << std::endl;> > return> 0;> }> |
>
>
Producción
My name is John and my favorite number is 42>
En el ejemplo anterior, hemos invertido el orden de los argumentos en la función std::format y hemos agregado índices posicionales a los marcadores de posición. El primer marcador de posición se reemplaza con el valor de num y el segundo marcador de posición se reemplaza con el valor de nombre.
Ejemplo 3:
En el siguiente ejemplo, veremos cómo std::format proporciona muchas opciones para formatear cadenas, donde podemos usar los marcadores de posición {} para especificar opciones de formato para cada argumento.
C++
// C++ Program to implement> // C++ 20 - std::format> #include> #include> > int> main()> {> > > // Declare and initialize a double variable.> > double> num = 3.14159;> > > // Declare and initialize a string variable.> > std::string name => 'John'> ;> > > // Format a string with two placeholders, one for a> > // double and another for a string. The first> > // placeholder formats the double with two decimal> > // places and the second placeholder truncates the> > // string to two characters.> > std::string formatted_str = std::format(> > 'My name is {1:.2s} and pi is {0:.2f}'> , num, name);> > > // Print the formatted string to the console.> > std::cout << formatted_str << std::endl;> > > return> 0;> }> |
>
>
Producción
My name is Jo and pi is 3.14>
En el ejemplo anterior, agregamos opciones de formato a los marcadores de posición. El primer marcador de posición tiene el formato de un número de punto flotante con dos decimales y el segundo marcador de posición tiene el formato de una cadena con un ancho máximo de dos caracteres.
Conclusión
std::format admite una amplia gama de opciones de formato, incluida la capacidad de formatear tipos definidos por el usuario. Es más eficiente que las opciones de formato de cadenas anteriores en C++, como sprintf y printf.