C++20 přichází s řadou nových funkcí a vylepšení, včetně formát() funkce. V tomto článku prozkoumáme, jak lze std::format použít k formátování řetězců v C++20.
C++20 – std::formát
std::format je nová funkce zavedená v C++20, která poskytuje způsob formátování řetězců nahrazením zástupných symbolů uvnitř formátovacího řetězce hodnotami poskytnutých argumentů. Zástupné symboly jsou reprezentovány pomocí {} uvnitř formátovacího řetězce.
Syntax:
std::string std::format(std::string_view format_string, Args... args);>
Typ návratu: Funkce vrátí std::string, který obsahuje formátovaný výstup.
V C++20 je zaveden nový datový typ s názvem std::string_view, který poskytuje pohled na základní řetězec. Funguje podobně jako ukazatel na řetězec, ale s dalšími bezpečnostními a pohodlnými funkcemi. Args… představuje variadický parametr, což znamená, že funkce std::format může mít proměnný počet argumentů libovolného typu.
Příklady C++ 20 – std::format
Příklad 1:
Následující kód ukazuje, jak použít std::format k formátování řetězce se zástupnými symboly pro proměnné.
C++
konverze řetězce java na int
// 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;> }> |
>
>
složený primární klíč
Výstup
My name is John and my favorite number is 42>
Ve výše uvedeném příkladu máme formátovací řetězec, který obsahuje dva zástupné symboly, {}. Hodnoty proměnných name a num předáme funkci std::format, která nahradí zástupné symboly hodnotami proměnných. Výsledný řetězec je uložen v proměnné formatted_str, která je následně vytištěna na konzoli.
Příklad 2:
V následujícím příkladu budeme rozumět pozičním argumentům s std::format.
C++
strsep
// 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;> }> |
náhodné číslo v java
>
>
Výstup
My name is John and my favorite number is 42>
Ve výše uvedeném příkladu jsme obrátili pořadí argumentů ve funkci std::format a do zástupných symbolů jsme přidali poziční indexy. První zástupný symbol je nahrazen hodnotou num a druhý zástupný symbol je nahrazen hodnotou name.
Příklad 3:
V následujícím příkladu uvidíme, jak std::format poskytuje mnoho možností pro formátování řetězců, kde můžeme použít zástupné symboly {} k určení možností formátování pro každý argument.
C++
android.process.acore se stále zastavuje
// 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;> }> |
>
>
Výstup
My name is Jo and pi is 3.14>
Ve výše uvedeném příkladu jsme do zástupných symbolů přidali možnosti formátování. První zástupný symbol je formátován jako číslo s plovoucí desetinnou čárkou se dvěma desetinnými místy a druhý zástupný symbol je formátován jako řetězec s maximální šířkou dvou znaků.
Závěr
std::format podporuje širokou škálu možností formátování, včetně možnosti formátovat uživatelem definované typy. Je efektivnější než předchozí možnosti formátování řetězců v C++, jako je sprintf a printf.