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 -
fmtbibliotekets hjemmeside, som lå som grunnlag forstd::format.