C++:
Interpolering av en streng
How to:
I C++20 har vi std::format
, som lar oss formatere og interpolere strenger på en lignende måte som i Python.
#include <format>
#include <iostream>
int main() {
int age = 30;
std::string name = "Ola";
std::string greeting = std::format("Hei, {}! Du er {} år gammel.", name, age);
std::cout << greeting << std::endl;
return 0;
}
Output:
Hei, Ola! Du er 30 år gammel.
Før C++20 var vi ofte avhengig av stringstream
eller kople strenger og variabler sammen med +
.
#include <sstream>
#include <iostream>
#include <string>
int main() {
int age = 30;
std::string name = "Ola";
std::ostringstream oss;
oss << "Hei, " << name << "! Du er " << age << " år gammel.";
std::string greeting = oss.str();
std::cout << greeting << std::endl;
return 0;
}
Output:
Hei, Ola! Du er 30 år gammel.
Deep Dive
Før std::format
i C++20, var strenginterpolasjon mer tungvint. Vi brukte std::ostringstream
eller gamle C-stil sprintf
, som var mindre sikker og ga rom for feil. std::format
er inspirert av Python’s f-strings og .format
, og det gir en type-sikker og leser-vennlig måte å formatere strenger på.
Alternativer eksisterer, inkludert boost::format
for eldre prosjekter, eller bruk av biblioteker som fmt
, som std::format
faktisk er basert på.
Implementasjonsdetaljer: std::format
håndterer forskjellige datatyper og kompliserte objekter ved å kreve at de har en tilpasset formatter funksjon om nødvendig. Det bruker også “{}” for plassholdere og lar deg spesifisere detaljer som bredde, padding, og presisjon.
See Also
- cppreference.com/std/format - Offisiell dokumentasjon for
std::format
. - fmtlib.net -
fmt
bibliotekets hjemmeside, som lå som grunnlag forstd::format
.