logo

C++ 20 – format std::

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.