C++20 inclou una sèrie de noves funcions i millores, inclosa la format () funció. En aquest article, explorarem com es pot utilitzar std::format per formatar cadenes en C++20.
C++20 - format std::
std::format és una nova funció introduïda a C++20 que proporciona una manera de formatar cadenes substituint els marcadors de posició dins d'una cadena de format amb els valors dels arguments proporcionats. Els marcadors de posició es representen mitjançant {} dins de la cadena de format.
Sintaxi:
std::string std::format(std::string_view format_string, Args... args);>
Tipus de retorn: La funció retorna un std::string que conté la sortida amb format.
A C++20, s'introdueix un nou tipus de dades anomenat std::string_view, que proporciona una vista de la cadena subjacent. Funciona de manera similar a un punter a una cadena, però amb funcions addicionals de seguretat i comoditat. L'Args... representa un paràmetre variadic, el que significa que la funció std::format pot prendre un nombre variable d'arguments de qualsevol tipus.
Exemples de C++ 20 – format std::
Exemple 1:
El codi següent mostra com utilitzar std::format per formatar una cadena amb marcadors de posició per a les 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;> }> |
>
>
Sortida
My name is John and my favorite number is 42>
A l'exemple anterior, tenim una cadena de format que conté dos marcadors de posició, {}. Passem els valors de les variables name i num a la funció std::format, que substitueix els marcadors de posició pels valors de les variables. La cadena resultant s'emmagatzema a la variable formatted_str, que després s'imprimeix a la consola.
Exemple 2:
En l'exemple següent, entendrem els arguments posicionals amb std::format.
C++
// 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;> }> |
>
>
Sortida
My name is John and my favorite number is 42>
A l'exemple anterior, hem invertit l'ordre dels arguments a la funció std::format i hem afegit índexs posicionals als marcadors de posició. El primer marcador de posició es substitueix pel valor de num i el segon marcador de posició es substitueix pel valor de nom.
Exemple 3:
En l'exemple següent, veurem com std::format ofereix moltes opcions per a formatar cadenes, on podem utilitzar els marcadors de posició {} per especificar opcions de format per a cada argument.
format cadena java
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;> }> |
>
>
Sortida
My name is Jo and pi is 3.14>
A l'exemple anterior, hem afegit opcions de format als marcadors de posició. El primer marcador de posició té el format d'un nombre de coma flotant amb dos decimals, i el segon marcador de posició té el format d'una cadena amb una amplada màxima de dos caràcters.
Conclusió
std::format admet una àmplia gamma d'opcions de format, inclosa la capacitat de formatar tipus definits per l'usuari. És més eficient que les opcions de format de cadena anteriors en C++, com ara sprintf i printf.