C++20 wordt geleverd met een groot aantal nieuwe functies en verbeteringen, waaronder de formaat() functie. In dit artikel zullen we onderzoeken hoe std::format kan worden gebruikt om tekenreeksen op te maken in C++20.
C++20 – std::formaat
std::format is een nieuwe functie, geïntroduceerd in C++20, die een manier biedt om strings op te maken door tijdelijke aanduidingen in een formatstring te vervangen door de waarden van de opgegeven argumenten. De tijdelijke aanduidingen worden weergegeven met {} in de opmaaktekenreeks.
Syntaxis:
std::string std::format(std::string_view format_string, Args... args);>
Retourtype: De functie retourneert een std::string die de opgemaakte uitvoer bevat.
In C++20 wordt een nieuw gegevenstype met de naam std::string_view geïntroduceerd, dat een weergave biedt van de onderliggende string. Het werkt op dezelfde manier als een verwijzing naar een string, maar met extra veiligheids- en gemaksfuncties. De Args… vertegenwoordigt een variadische parameter, wat betekent dat de functie std::format een variabel aantal argumenten van elk type kan aannemen.
Voorbeelden van C++ 20 – std::format
Voorbeeld 1:
De volgende code laat zien hoe u std::format kunt gebruiken om een tekenreeks op te maken met tijdelijke aanduidingen voor variabelen.
kruskals-algoritme
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;> }> |
>
>
Uitvoer
ram-acteur
My name is John and my favorite number is 42>
In het bovenstaande voorbeeld hebben we een opmaaktekenreeks die twee tijdelijke aanduidingen bevat, {}. We geven de waarden van de variabelen naam en num door aan de functie std::format, die de tijdelijke aanduidingen vervangt door de waarden van de variabelen. De resulterende tekenreeks wordt opgeslagen in de variabele formatted_str, die vervolgens naar de console wordt afgedrukt.
Voorbeeld 2:
In het volgende voorbeeld zullen we de positionele argumenten met std::format begrijpen.
np.clip
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;> }> |
matrices in c-programmering
>
>
Uitvoer
My name is John and my favorite number is 42>
In het bovenstaande voorbeeld hebben we de volgorde van de argumenten in de std::format-functie omgekeerd en hebben we positionele indices aan de tijdelijke aanduidingen toegevoegd. De eerste tijdelijke aanduiding wordt vervangen door de waarde num en de tweede tijdelijke aanduiding wordt vervangen door de waarde naam.
Voorbeeld 3:
In het volgende voorbeeld zullen we zien hoe std::format veel opties biedt voor het opmaken van tekenreeksen, waarbij we de tijdelijke aanduidingen {} kunnen gebruiken om opmaakopties voor elk argument op te geven.
C++
bash anders als
// 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;> }> |
>
>
Uitvoer
My name is Jo and pi is 3.14>
In het bovenstaande voorbeeld hebben we opmaakopties toegevoegd aan de tijdelijke aanduidingen. De eerste tijdelijke aanduiding is opgemaakt als een getal met drijvende komma met twee decimalen, en de tweede tijdelijke aanduiding is opgemaakt als een tekenreeks met een maximale breedte van twee tekens.
Conclusie
std::format ondersteunt een breed scala aan opmaakopties, inclusief de mogelijkheid om door de gebruiker gedefinieerde typen op te maken. Het is efficiënter dan eerdere opties voor tekenreeksopmaak in C++, zoals sprintf en printf.